
異なるコードを検出したため、ページが表示されない
phpでhtmlソースを解析するようなツールを作成している際に、Chromeにて下記文言が表示されました。ページは表示されずエラー画面になります。
このページで通常と異なるコードを検出したため、個人情報(例: パスワード、電話番号、クレジット カード番号)を保護するために、ページをブロックしました。
最初はphpの構文エラーか何かだと思い込んで間違っていそうな箇所を探していましたが、エラー画面を見直してみると、構文エラーではなく、セキュリティ的にブロックされたような感じです。
このエラーは初めて見ましたので、少し調べてみました。
エラーが発生した操作
フォームで「<div onclick=””></div>」というテキストを送信します(post送信)。
更に送信されてきた値をphpの var_dump または echo によって画面表示しようとすると、「このページは動作しません・・・」というエラーになります。
※上述したエラー
エラー発生パターンの調査
フォーム送信なしの場合
フォーム送信ではなくそのまま書く場合であれば問題ありません。
- 「<div onclick=””></div>」をhtmlとして記載し画面に表示⇒正常
- 「<div onclick=””></div>」を var_dump または echo によって画面に表示⇒正常
フォーム送信ありの場合
- 「<div onclick=””></div>」を送信するが、画面に表示しない⇒正常
- 「<div onclick=””></div>」を送信し、受け取った値(post)から「<div onclick=””></div>」の部分を除外し、画面に表示⇒正常
- 「<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'];
- 「<div onclick=””></div>」を送信し、受け取った値(post)は使用せず、 var_dump または echo によって「<div onBlur=””></div>」を画面に表示⇒正常
// postを表示するのではなく、「<div onBlur=""></div>」を直接書きます var_dump('<div onBlur=""></div>'); echo '<div onBlur=""></div>';
- 「<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などでは起きない現象なので、自分だけが確認したい場合は、そちらを使用することで回避することができます。