IIS FastCGI 上の PHP で HTTP 認証は可能ですか?
-
19-09-2019 - |
質問
php5isapi.dll を使用した PHP 5.2.3 から、FastCGI と php-cgi.exe を使用した PHP 5.3.0 に移行しました。このサイトには、次のような Windows/ntlm/http 認証用のフックがあります。
if(empty($_SERVER["REMOTE_USER"]))
{
header("HTTP/1.1 401 Unauthorized");
exit;
}
$winuser = $_Server["REMOTE_USER"];
//parse $winuser to make sure it is on my domain, and can login to the site.
//set a cookie specifying that this user is logged in
//redirect to site.
これは、isapi を使用した PHP 5.2.3 環境でうまく機能しました。IIS6 の FastCGI に移行したところ、壊れてしまいました。私にとってはうまくいきますが、サーバーには管理者がいます。管理者のいない人 (ほとんどの人) には、次のようなバリエーションが表示されます。
FastCGI Error
The FastCGI Handler was unable to process the request.
________________________________________
Error Details:
• The FastCGI process exited unexpectedly
• Error Number: -1073741819 (0xc0000005).
• Error Description: Unknown Error
HTTP Error 500 - Server Error.
Internet Information Services (IIS)
ドキュメントやログファイルを調べてみましたが、なかなか進まないようです。実際には、.php ファイルへのアクセスにリモート ユーザー名を使用したくないのですが、名前を取得してデータベースと照合したいだけです。実際の php 実行を行うのは anon ユーザーである必要があります。
手がかりはありますか?
解決
ある程度の進歩はありますが、根本的な解決にはまだ至っていません。
ここのアドバイスに従うと役に立ちました。 FastCGI ドキュメント特に セキュリティに関する推奨事項 セクション。これにより、FASTCGI 500 からエラーが php エラー ログに記録されました。
PHP/IIS/FastCGI は、anon ユーザーの代わりに認証を試みるユーザーを介してセッション ディレクトリ (私の場合は C:\PHP\Session) にアクセスしようとしているようです。
そのフォルダーの「変更」権限を「すべてのユーザー」に設定すると、サイトが希望どおりに動作できるようになります。しかし、これを行うことでどのくらいの規模のセキュリティ ホールが発生するのか気になります...