Chrome79以降からは、ステータスコード401を返すページにBasic認証を設定するとアクセスできなくなる
はじめに
今までBasic認証をかけていて閲覧はできていたページが、Chrome79から急に閲覧できなくなるという問題が発生しました。
StackOverflowやTwitterなどを調べてみてもそのような問題で悩んでいる方はいません。
ちなみに対象のページはやや特殊で、Basic認証をかける以前から、サービスにログインせずにアクセスした場合は ステータスコード = 401
を返却しつつ、ページコンテンツを返却します。
Chromium のソースコードを読んでみましたが、なかなかリーディングができず。(これは僕のスキルの問題です)
そこで実際に問題を再現させた後、「原因」の調査と「対策」を検討してみました。
検証環境
サーバサイド
$ apachectl -v
Server version: Apache/2.4.38 (Debian)
Server built: 2019-08-18T13:34:20
$ php -v
PHP 7.2.23 (cli) (built: Oct 5 2019 00:23:19) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
クライアントサイド
プラットフォーム
PC
ブラウザ
2020-01-08現在、確認した環境は以下の2つです。 version 81
は Chrome Canary を利用しました。
Version 79.0.3945.88 (Official Build) (64-bit)
( Chrome )Version 81.0.4020.0 (Official Build) canary (64-bit)
( Chrome Canary )
*※いずれの環境でも問題が発生することを確認済みです。
検証環境の用意
まずはサーバ環境を構築します。
Docker を使って Apache+PHP
の実行環境を構築します。
- カレントディレクトリのファイルをDocuemntRootにマウントさせます
http://localhost:9000
でアクセスできるようにしておきます。
$ docker run -d \
--rm -p 9000:80 -v $PWD:/var/www/html \
--name apache php:7.2-apache
次に該当ページの作成とBasic認証の設定を行います。
# 該当ページ。常にレスポンスコード=401とコンテンツを返す
$ cat <<EOF >index.php
<?php
header('HTTP/1.1 401 Unauthorized');
?>
<html>
<head></head>
<body>
<h1>ログイン後しかアクセスできないページ</h1>
ログイン後に来てね!
</body>
</html>
EOF
# Basic認証の設定
$ cat <<EOF >.htaccess
AuthType Basic
AuthName "Please enter username and password"
AuthUserFile /var/www/html/.htpasswd
require valid-user
EOF
# Basic認証のパスワード設定ファイルを作成
$ htpasswd -c .htpasswd admin
New password:
Re-type new password:
Adding password for user admin
最終的に3ファイル作成されます。
$ ls -a
./ ../ .htaccess .htpasswd index.php
ブラウザでアクセスしてみる
それではブラウザでアクセスしてみましょう。
Chrome79
以降でアクセスすると、 Basic認証 ダイアログが表示されます。
Basic認証 で正しいユーザ、パスワードを入力しても、ページは真っ白のままとなります。
ところが Firefox
や Safari
でアクセスすると Basic認証 突破後にページが表示されます。
Basic認証の認証済みステータスがリセットされる
HTTP RESPONSE CODE = 401
が返却されると、Basic認証の認証済みステータスがリセットされるようです。
対策
どうしても Basic認証 ( Digest認証を含む ) を設定したい場合、 レスポンスコード = 401
を返却するようなページはつくらない、ということになるかと思います。
あるいは利用者が限定される場合は、Chrome以外のブラウザを利用してもらうことで対処できるかと思います。
ディスカッション
コメント一覧
まだ、コメントがありません