CGI 스크립트를 표시하지 않는 표준 방법은 무엇입니까?

CGI 스크립트를 표시하지 않는 표준 방법은 무엇입니까?

userdirApache에서 mod를 사용하여 CGI 디렉토리를 설정했습니다 . 내 노트북의 다른 사용자에게 적용할 수 있도록 가능한 한 일반적인 구성을 사용하고 있습니다. 다음 URL을 사용하여 스크립트를 실행할 수 있는 지점에 도달했습니다.

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

public_html그러나 서버의 루트 디렉토리인 에 my에 대한 링크도 넣었 /var/www/html으므로 URL이 호출되면 에 있는 localhost내 디렉토리에 대한 링크가 포함된 색인을 얻습니다 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>

그러면 디렉토리 목록도 비활성화됩니다.

색인을 활성화하려면 로 변경하여 상위 옵션을 Indexes추가하거나 Options상속받도록 하세요 . 예:ExecCGI+ExecCGI

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

나는 원하지 않는 옵션을 상속받지 않기 때문에 Options Indexes ExecCGIover 를 사용하는 것을 선호합니다 .Options +ExecCGI

관련 정보