- ベストアンサー
HTMLエスケープすべき場所について教えてください。
HTMLエスケープすべき場所について教えてください。 エスケープ処理は、利用目的に応じてなるべく直前に行なう、という原則に基づくと、 下記考え方で合っているでしょうか? ■確認したい項目1. ▽受取側のページ 例えば、if(isset(($_POST['hoge'])){~ の時点では、存在確認をしているだけなので、エスケープ処理は必要ない。 ■確認したい項目2. 自由入力できるテキスト欄は、POST・GETどちらも、画面表示処理の直前に、エスケープ処理が必要。 ■確認したい項目3. ▽予め選択肢があるプルダウン等 →POST…送信データを変更される可能性がないため、エスケープ不要。 →GET…ブラウザのURL欄を通じて送信データを変更される可能性があるため、エスケープは必要。 ■確認したい項目4. hiddenで送信するデータは、POST・GETどちらも送信データを変更される可能性がないため、エスケープ不要。 この考え方で、合ってますでしょうか? なるべく推奨されるやり方で書きたいと思いますので、アドバイスをよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>■確認したい項目1. 合ってます。 不要というか、そもそも値があるかどうかもわからないのに何をエスケープするのか。 >■確認したい項目2. 合ってます。 表示というか、変数や式の値の出力の直前ですね。 >→POST…送信データを変更される可能性がないため、エスケープ不要。 間違い。 >hiddenで送信するデータは、POST・GETどちらも送信データを変更される可能性がないため、エスケープ不要。 画面上、HTML的にどんな意味を持つかに関係なく、変数や式の値をHTML画面の一部として出力する際にはエスケープが必要です。 こんな間違いをすると言うことは、どうやって攻撃されるのかの基本がわかってないと思います。攻撃者はブラウザを通常操作する訳じゃなくて、手作成もしくはプログラムでリクエストを生成して送ってくるんですよ。すべての値が操作可能です。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
#1さんもご提示されているとおり、「ユーザーから送られてくるデータはすべて汚染されている」 と考えるべきでしょう そうすればやるべきことは自明で、バリデートとサニタイズをしたうえで、適当な エスケープ処理をかけてやるのが妥当です。 ちなみにプルダウンで取得したデータをプルダウンで表示する場合は、 selectedの付け替えになるので、エスケープすることはないかもしれません。 またhiddenでデータを送信するのはあまり有効な手段ではないので セッションなどで代替することをお勧めします。
お礼
ありがとうございました。
お礼
ありがとうございました。