こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

phpのXSS対策 どこに問題が?

phpのXSS対策について質問があります。
あるphpの参考書に以下のような記述があったのですが、理解できません。↓

----------------------------------------------------------------------------------
ただし、htmlspecialchars()関数でのエスケープ処理は「&」「<」「>」「"」「'」を文字参照に変換するものなので、これらの文字をまったく使わずにJavaScriptのコードを記載できる場所に変数を表示させるようなHTMLを書いてしまった場合は対策できません。

たとえば、以下のような場所に変数を表示する場合です。このようなコーディングをしてしまった場合は、htmlspecialchars()関数でのエスケープ処理はXSSを防ぐことはできません。このような場所に変数を書かないように注意してください。

<a href="<?php echo $input; ?>">
----------------------------------------------------------------------------------

この記述を書いてしまうとなぜhtmlspecialchars()関数では防げないのでしょうか?
よろしくお願い致します。

投稿日時 - 2013-07-12 17:26:05

QNo.8173391

すぐに回答ほしいです

質問者が選んだベストアンサー

>つまり、
>リンク先にscriptを記述した攻撃ページを用意できるから危険。

ということも間違いなくあると思いますが、
参考書で言及されているのは、

ユーザーからのinputが

javascript:alert(\'test\');

のような文字列だった場合、

【サンプル】
-----------------------------------------
<?php
$input = 'javascript:alert(\'clicked!\');' // ユーザからの入力値(本来は$_POSTなどで受ける)
?>

<a href="<?php echo htmlentities($input, ENT_QUOTES); ?>">click</a>

-----------------------------------------

という風に出力した場合でも、
Javascriptが実行されてしまうと思いますので、
こういう部分に書かないようにという注意書きだと思います!

ご参考になれば幸いです。

投稿日時 - 2013-07-12 18:07:10

お礼

素早いご回答ありがとうございます。

試してみて、やっと理解することができました。
(このような記述で実行されてしまうとは知りませんでした・・。)

この度は本当にありがとうございました。

投稿日時 - 2013-07-12 18:25:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

<a href="<?php echo $input; ?>">
の場合、$inputを文字参照に変えても、リンクをクリックされると実行できてしまうからです。

投稿日時 - 2013-07-12 17:33:23

お礼

素早いご回答ありがとうございます。

つまり、
リンク先にscriptを記述した攻撃ページを用意できるから危険。

ということでしょうか?

投稿日時 - 2013-07-12 17:54:37

-広告-
-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-