.html
という名前のtest.html
ファイル内に次のサーバーサイドインクルードがあります。
<!--#include virtual="/cgi-bin/myScript.cgi"-->
<!--#include virtual="/includes/myFile.html"-->
ブラウザでtest.html
をライブで表示すると、myFile.html
は正常に挿入/レンダリングされますが、myScript.cgi
で表示されます。
[このディレクティブの処理中にエラーが発生しました]
ブラウザのアドレスバーから、/cgi-bin/myScript.cgi
は出力を正常にレンダリングしており、ファイルがパスに存在し、アクセス許可が正しいことを証明しています(755)。
myFile.html
が適切に含まれているため、SSIハンドラーが正しく設定され、ページが解析されていることが証明されます。
SSIが機能していて、myScript.cgi
が機能している場合、なぜ#include virtual
がこのスクリプトで機能しないのですか?
ちなみに、これはcPanelホスティングアカウントにあり、同じホスティング会社のサーバーに同じ構成の他の多くのアカウント(サイト)があります。他はすべて期待どおりに機能しています。
スクリプトは、今日の日付からの年をフォーマットされたテキストとして返すだけです。出力の前にはContent-type: text/html\n\n
が付いており、新しいPerlスクリプトではありません。他のアカウントで動作しています。
私のホスティング会社はこの問題をcPanelにエスカレーションしましたが、恥ずかしいことに、結局.htaccess
ファイルの設定が欠落してしまいました。
動作していたアカウントにはこの行がありましたが、壊れたアカウントにはありませんでした...
Options All -Indexes
All
には、デフォルトで、ホスティング会社が機能させるために追加したものが含まれています...
Options +Includes +ExecCGI
+ExecCGI
がないと、元の投稿で説明したように壊れます。
SSIが機能していることを発見するための適切なトラブルシューティング。
問題をCGIサブシステムにローカライズしました。
まず、.htaccess
ファイルでこれを設定していることを確認する必要があります。
Options ExecCGI
問題が解決しない場合は、エラーログを調べて理由を確認する必要があります。
このエラーメッセージは500エラー(通常は.htaccess自体のエラーで発生するもの)と同じであるため、ログには説明的なエラーメッセージが表示されます。
cPanelを使用すると、エラーログを表示できます。
彼らはあなたの親友です。
エラーログセクションで、cPanelはあなたが探しているクライアントIPアドレスを上部に表示します。これは、ISPによって割り当てられたIPアドレスです。
最新バージョンのcPanel(2017年11月にBluehostで使用しているものなど)では、クライアントからのエントリが強調表示されるため、ハッキングの試みで気が散ることはありません。強調表示がない場合は、ブラウザのCtrl-F(検索)機能を使用して、自分からのエントリを見つけます。
彼らが扱っているすべてのハッキングの試みの例については、この回答の最後を参照してください。自分のサーバーを実際に実行しようとするのではなく、彼らにそれを処理させることは、あらゆるペニーの価値があります。
回答:CGIに<!--#Include
を使用することが問題だと思います。
最近のほとんどのApacheサーバーでは、次のものを使用する必要があります。
<!--#exec cgi="/cgi-bin/myScript.cgi" -->
単にスクリプトを含めるのではなく。
==> HTMLファイルの拡張子が.shtm
または.shtml
であることを確認してください。
すべての/cgi-bin/
ファイルには755のアクセス許可が必要であることに注意してください。 -つまり、所有者の場合はRWX、グループとパブリックの場合はRX
chmod 755 /cgi-bin/*
これは、独自のサーバーを実行する代わりにホスティングサービスを使用することが良い理由を示しています。
ハッキングの試みのサンプルログ出力。ほとんどがRBLによってブロックされています。