【Chrome】PHPでデバッグ中に『このページで通常と異なるコードを検出したため、個人情報・・・』が表示された。回避?

異なるコードを検出したため、ページが表示されない

phpでhtmlソースを解析するようなツールを作成している際に、Chromeにて下記文言が表示されました。ページは表示されずエラー画面になります。

このページで通常と異なるコードを検出したため、個人情報(例: パスワード、電話番号、クレジット カード番号)を保護するために、ページをブロックしました。

最初はphpの構文エラーか何かだと思い込んで間違っていそうな箇所を探していましたが、エラー画面を見直してみると、構文エラーではなく、セキュリティ的にブロックされたような感じです。

このエラーは初めて見ましたので、少し調べてみました。

保護するために、ページをブロックしました

エラーが発生した操作

フォームで「<div onclick=””></div>」というテキストを送信します(post送信)。
更に送信されてきた値をphpの var_dump または echo によって画面表示しようとすると、「このページは動作しません・・・」というエラーになります。
※上述したエラー

エラー発生パターンの調査

フォーム送信なしの場合

フォーム送信ではなくそのまま書く場合であれば問題ありません。

  1. 「<div onclick=””></div>」をhtmlとして記載し画面に表示⇒正常
  2. 「<div onclick=””></div>」を var_dump または echo によって画面に表示⇒正常

フォーム送信ありの場合

  1. 「<div onclick=””></div>」を送信するが、画面に表示しない⇒正常
  2. 「<div onclick=””></div>」を送信し、受け取った値(post)から「<div onclick=””></div>」の部分を除外し、画面に表示⇒正常
  3. 「<div onclick=””></div>」を送信し、受け取った値(post)を var_dump または echo によって画面に表示⇒エラー
    ※onclick以外にもonBlur / onFocus / onChange / onSelect / onSelectStart / onSubmit / onReset / onAbort / onError / onLoad / onUnload / onClick / onDblClick / onKeyUp / onKeyDown / onKeyPress / onMouseOut / onMouseOver / onMouseUp / onMouseDown / onMouseMove / onDragDrop も同様にエラーになります

    // 下記どちらでもエラーになります
    var_dump($_POST['xxx']);
    echo $_POST['xxx'];
  4. 「<div onclick=””></div>」を送信し、受け取った値(post)は使用せず、 var_dump または echo によって「<div onBlur=””></div>」を画面に表示⇒正常
    // postを表示するのではなく、「<div onBlur=""></div>」を直接書きます
    var_dump('<div onBlur=""></div>');
    echo '<div onBlur=""></div>';
  5. 「<div onclick=””></div>」を送信し、 var_dump または echo によって「<div onclick=””></div>」を画面に表示⇒エラー
    // postを表示するのではなく、「<div onclick=""></div>」を直接書きます
    var_dump('<div onclick=""></div>');
    echo '<div onclick=""></div>';

調べた結果

フォーム送信していない場合は問題なし。

フォーム送信した場合は、javascriptのイベント処理を含むタグをフォームで送信し、「受け取った値をそのまま表示する」もしくは「直接 var_dump または echo で表示する」のどちらの場合でもエラー画面になってしまう。

エラー画面が表示され少し驚きましたが、悪さをする可能性があるpost送信に関しては、画面表示させないというセキュリティ対策なのかなと思います。
※詳しくは時間があるときに追加で調べてみようかと思います

回避策

IE、Firefoxなどでは起きない現象なので、自分だけが確認したい場合は、そちらを使用することで回避することができます。