CGIスクリプトを表示しない標準的な方法は何ですか?

CGIスクリプトを表示しない標準的な方法は何ですか?

userdirApacheのモードを使用してCGIディレクトリを設定しました。私はラップトップの他のユーザーにも動作できるようにできるだけ一般的な設定を使用します。次のURLを使用してすでにスクリプトを実行できます。

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

public_htmlただし、サーバーのルートにもリンクを入れてURLが呼び出される/var/www/htmllocalhost、私のディレクトリへのリンクを含むインデックスを取得しますlocalhost/tomas。リンクが正しく機能し、私のユーザーの1人である別のインデックスが表示されます。これで、プライベートインデックスを取得したときに表示できるように、プライベートcgi-binが配置されます/home/*/public_html/cgi-bincgi-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別のパスを介してディレクトリにアクセスできるため、1つの方法は別のパスのすぐ下に代替パスがあるセクションをコピーすることです。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

関連情報