PHPのバージョンを上げたら認証ができなくなった

PHPのバージョンを5.3.3から5.6に上げたところ、PukiWikiのBasic認証ができなくなった(ユーザー名とパスワードを入力しても無視され、繰り返し、無限にたずねてくる)という問題が発生しました。以下はその解決法の備忘録です。

RewriteRuleでHTTP_AUTHORIZATIONを設定する

PHP: PHP による HTTP 認証 - Manual」に投稿されているノートによると、CGI/FastCGI版のPHPの場合、HTTP_AUTHORIZATIONヘッダが自動で設定されないため、$_SERVER['PHP_AUTH_USER']や$_SERVER['PHP_AUTH_PW']、$_SERVER['HTTP_AUTHORIZATION']が設定されないということです(getallheaders関数でも取得できません)。

よって解決法としては、例えば次のような記述を.htaccessに書いて、HTTP_AUTHORIZATIONヘッダを設定します。

  1
  2
  3
  4
<IfModule mod_rewrite.c>
RewriteEngine   On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

この方法で私の場合もうまく行きました。私の利用しているサーバーは、PHPを5.6にすると必ずFastCGIが有効になるようなので、それが原因でこのような問題が起こったのかもしれません。ただ、PHP5.3.3の時からCGI/FastCGI版ではありました。

SetEnvIfで設定する

同じように、SetEnvIfを使用する方法もあります。

  1
  2
  3
<IfModule mod_setenvif.c>
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>

セッションを使った認証に切り替える

自作プラグイン/login.inc.php」を使うと、Basic認証を使わずに、セッションを使って認証できるようになります。


ページ情報
[ トップ ]   [ 編集 | 凍結 | 差分 | バックアップ | 添付 | 複製 | 名前変更 | リロード ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]