はい! こんにちは! Hamachiya2ですよ!
いま、エガミくんの書き込みみながら、ざくっとソースみてみたよー。
XSSの対策ってね、ぼくもよくわかってないけど、
「出力時にエスケープする」っていうのが定石らしいよ。
でもエガミくんのやろうとしたのは「入力時のエスケープ」だね。
だから $_GET のところ(入力)で何かをするのではなくて…、
レスポンスのコーナーのところ。htmlに変数埋め込んで echo してるとこ。
そこの全ての変数をエスケープしちゃう方がいい感じかな。
その際に注意すべきは、htmlの属性内(alt=ナントカとか、src=ナントカとか)に変数を埋め込んでいる場合は、ちゃんとクオートの類もエスケープする感じ?
echo '<img src="' . $hensuu . '" alt="ぺろぺろ" />';
とかなら、$hensuu はダブルクオートもエスケープだよ。
あ、htmlspecialchars ってダブルクオートはデフォルトで「"」に変換されるんだっけ?
ちょっと試してみてね。
もし↓こんな風に、htmlの属性のクオートにシングルクオートを使ってる場合だと…
echo "<img src='" . $hensuu . '" alt='ぺろぺろ' />";
これは
echo "<img src='" . htmlspecialchars($hensuu, ENT_QUOTES) . '" alt='ぺろぺろ' />";
こうする感じかな?
あと、サンプルコードには含まれていなかったけど、
本番の方だと、htmlのheadの中でも変数つかってるよね。
たとえば、xxxで検索すると、titleタグやメタタグにもxxxが入ってくる。
そのあたりも、とりあえず「表示しようとしてる箇所」の「表示する一歩手前」で全てエスケープしてやればいいと思うよ。
もしかしたら言ってること間違ってるかもしれないけど、
その時はきっと誰かが突っ込んでくれるはずー。
追記
あと、寂しいことってなに?
早速お返事有難う御座います!id:hiroyukiegamiです! id:Hamachiya2先生からのまとめ なるほど!前回 $Hamachiya2 = htmlspecialchars($_GET["data"], ENT_QUOTES); //←ここを追加 $params = array('api_key' => 'フリッ...