web-dev-qa-db-ja.com

Apache:CGIスクリプトで機能しない仮想SSIを含める

.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ホスティングアカウントにあり、同じホスティング会社のサーバーに同じ構成の他の多くのアカウント(サイト)があります。他はすべて期待どおりに機能しています。

  • cPanelバージョン:11.30.6(ビルド3)
  • Apacheバージョン:2.2.17
  • アーキテクチャ:x86_64
  • オペレーティングシステム:linux
  • Perlバージョン:5.8.8
  • カーネルバージョン:2.6.18-194.32.1.el5
  • cPanel Pro:1.0(RC1)

スクリプトは、今日の日付からの年をフォーマットされたテキストとして返すだけです。出力の前にはContent-type: text/html\n\nが付いており、新しいPerlスクリプトではありません。他のアカウントで動作しています。

2
Sparky

私のホスティング会社はこの問題をcPanelにエスカレーションしましたが、恥ずかしいことに、結局.htaccessファイルの設定が欠落してしまいました。

動作していたアカウントにはこの行がありましたが、壊れたアカウントにはありませんでした...

Options All -Indexes

Allには、デフォルトで、ホスティング会社が機能させるために追加したものが含まれています...

Options +Includes +ExecCGI

+ExecCGIがないと、元の投稿で説明したように壊れます。

1
Sparky

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/*

===>それらまたは.htaccessファイルに777のアクセス許可を与えないでください。そうしないと、外部の誰かがそれらを簡単に変更できます。


これは、独自のサーバーを実行する代わりにホスティングサービスを使用することが良い理由を示しています。

ハッキングの試みのサンプルログ出力。ほとんどがRBLによってブロックされています。

enter image description here

0
SDsolar