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

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

userdirApache의 모드를 사용하여 CGI 디렉토리를 설정했습니다. 나는 내 랩톱의 다른 사용자에게도 작동할 수 있도록 최대한 일반적인 구성을 사용합니다. 다음 URL을 사용하여 이미 스크립트를 실행할 수 있습니다.

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

public_html하지만 서버의 루트에도 링크를 넣어서 URL이 호출 /var/www/html되면 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

관련 정보