如何执行符号链接指向的cgi?

如何执行符号链接指向的cgi?

我的网站有几个cgi(从编译的可执行二进制文件C源,以防万一)从浏览器运行时工作正常,例如
      http://mydomain.com/cgi-bin/myprog.cgi
但是如果我在 cgi-bin/ 中放置指向 myprog.cgi 的符号链接
      cd cgi-bin/
      ln -s myprog.cgi proglink.cgi
然后尝试从浏览器运行
      http://mydomain.com/cgi-bin/proglink.cgi
会生成 500 错误。

我的 .htaccess 有
      AddHandler cgi-script .cgi
      Options +ExecCGI +FollowSymLinks -Indexes
(我也尝试过 +SymLinksIfOwnerMatch,无论是否带有 +FollowSymLinks ),但这似乎不起作用。

编辑我应该提到(感谢@slm 在下面的评论中的建议)该网站已经有 .php 脚本的符号链接,这些符号链接多年来一直运行良好。 (那些 php 脚本执行 $_SERVER['PHP_SELF'],返回符号链接的名称,并且所有操作都没有任何问题。)但是现在到可执行图像 .cgi 的符号链接失败,如上所述。
      我可能还应该提到该网站位于共享主机上(便宜的 dreamhost.com 共享主机)。

谷歌搜索这个问题似乎表明没有任何效果,并且 apache 根本不会执行符号链接指向的 cgi。谷歌搜索是否正确,或者有什么方法可以在符号链接之后运行cgi?如果它是正确的,而我无法做到这一点,请让我在下面描述为什么我想这样做,然后希望您能提出一种可行的替代策略,并实现相同的总体目的。 ..


...所以这就是安全下面的标签出现了。其中一些 cgi 已经成为我网站的 ddos​​ 攻击的目标(尽管上帝知道,或者也许他不知道,为什么有人会打扰我的网站,它绝对没有任何价值)。因此,我向每个 cgi 添加了一些代码(每个 cgi 的代码几乎相同)来验证其 ?query_string,并为其分配“攻击可能性”分数。如果分数较小,cgi 会忽略该请求,而如果分数较大,则用户的 ipaddr=getenv("REMOTE_ADDR") 会自动附加到 .htaccess 并带有“deny from”。还有各种中间行动,比如给我发电子邮件告知情况。

所以这就变成了很多行代码。我希望(并且仍然希望)编写一个一劳永逸的前端查询验证,而不是将其单独编译到每个 cgi 中。然后,如果一切正常,它会发出 system() 调用来运行所请求的 cgi。所以我写了一个简短的小测试程序,它通过发出 system() 调用来间接运行 cgi,而且确实工作正常。

现在出现符号链接问题是因为,在一般情况下,前端必须能够运行许多不同的 cgi,因此需要知道要运行哪个 cgi。通过将每个 cgi 名称符号链接到该前端 cgi,它可以解析出 getenv("SCRIPT_NAME"),这将为其提供符号链接名称,从而识别发出请求的特定 cgi。有点像 php $_SERVER['PHP_SELF']。因此,符号链接似乎是最简洁、最简单的解决方案。但是,如果这对于 apache/.htaccess 不可行,那么您能否建议其他方法来实现相同的目的?

相关内容