Chrome の「このページは動作していません」問題を回避する

みなさんお困りのコイツです。(ERR_BLOCKED_BY_XSS_AUDITOR エラー) このページは動作していません このページで通常と異なるコードを検出したため、個人情報(例: パスワード、電話番号、クレジット カード番号)を保護するために、ページをブロックしました。

原因と対策

Chromeのバージョン56から、<script><iframe> タグが送信されると、「このページは動作していません」という ERR_BLOCKED_BY_XSS_AUDITOR エラーが出る場合があります。これは、Chromeさんのおせっかい機能でして、XSS を事前に察知してよりセキュアにブラウジングするために最近追加された機能ですが、お客様から 「エラー出るんだけど」 という趣旨の連絡を受ける側の人間からすれば、よけいなことしやがって的な迷惑機能でしかなかったりします。

もちろん、Chromeのバージョンを55に下げたりブラウザを変えたりすれば回避できますが、できればクライアント側ではなくサーバ側で対応したいですよね。実は、以下のHTTPヘッダーを送り出すことでこの厳しいXSS機能を無効にすることができるのです。

ヘッダー名
X-XSS-Protection 0

X-XSS-Protection ヘッダの正しい理解はこちらから

以下、対応策を2つ用意しました。

どうぞー。

.htaccessで対応

まずはみんな大好き .htaccess ファイルをいじってなんとかします。(Apache の conf ファイルを編集できる権限がある場合はそっちでもいいです。)

.htaccess に以下を追記します。

<ifModule mod_headers.c>
Header always set X-XSS-Protection "0"
</ifModule>

これで、Chromeの厳しいXSSのチェックを無効にすることが可能です。 ですが、レンタルサーバによっては上記設定が機能しない場合もあります。(Internal Server Error になってしまう場合もあるので、そうなったらすぐ戻しましょう・・)

プログラム側のヘッダー出力で対応

.htaccess に書けなくても落胆することはありません。プログラム自体を書き換えてしまえばいいのです。

具体的には、画面出力の際に該当のヘッダーを出力すればいいだけです。

print "X-XSS-Protection: 0\n";
header('X-XSS-Protection: 0');

最近のWeb開発は、プレーンなPerlやPHPというよりは、フレームワークや RubyNode.js だったりするかと思いますので、それぞれ対応する方法で上記のようにヘッダーを出力すればOKです。

様々な事情によりソースコードに手入れできない場合は、諦めるか、今後のChromeのバージョンアップに期待しましょう・・!