不显示 CGI 脚本的标准方法是什么?

不显示 CGI 脚本的标准方法是什么?

userdir我已经使用Apache 中的 mod设置了一个 CGI 目录。我使用尽可能通用的配置,以使它们适用于我的笔记本电脑上的其他用户。我已经可以使用以下 URL 运行脚本了:

http://localhost/~tomas/cgi-bin/hw.cgi

public_html但我还在服务器的根目录中放置了一个链接/var/www/html,因此当localhost调用 URL 时,我会获取带有指向我的目录的链接的索引localhost/tomas。该链接工作正常,并显示另一个索引,即我的用户之一。现在,私有 cgi-bin 位于,因此我可以在获取私有索引时/home/*/public_html/cgi-bin看到。cgi-bin现在,当我进入这个目录时,我会得到另一个带有 CGI 的索引。这对我来说很好,尽管我不确定这是否被认为是安全的。但如果我从那里调用 CGI,它不会执行并显示。这就是问题。

据我所知,这是关于Apache不查看

http://localhost/tomas/cgi-bin/hw.cgi

作为

http://localhost/~tomas/cgi-bin/hw.cgi

我一直在寻找一个可以使其工作的指令,但找不到它。我什至不太确定我可以使用什么——指令还是其他什么?

这是我的usermod.conf

<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>

    <Directory /home/*/public_html/cgi-bin>
        Options ExecCGI
        AddHandler cgi-script .cgi
    </Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

答案1

由于cgi-bin可以通过单独的路径访问该目录,因此一种方法是将Directory具有备用路径的部分复制到另一个路径的正下方,例如:

<Directory /var/www/html/*/cgi-bin>
    Options ExecCGI
    AddHandler cgi-script .cgi
</Directory>

这也应该禁用目录列表。

如果您希望启用索引,请添加IndexesOptions或通过更改为使其继承其父选项,ExecCGI例如+ExecCGI

<Directory /var/www/html/*/cgi-bin>
    Options Indexes ExecCGI
    AddHandler cgi-script .cgi
</Directory>

我更喜欢使用Options Indexes ExecCGIoverOptions +ExecCGI因为这样你就不会继承任何不需要的选项。

相关内容