- ベストアンサー
SESSION変数について
プログラム初心者です htmlspecialcharsを省略するか迷っています SESSION変数を表示するときはhtmlspecialcharsを使ったほうがいいでしょうか? $id = htmlspecialchars($_SESSION['id'], ENT_QUOTES); echo $id; よろしくおねがいします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
使いやすいようにラッパー関数は作っておきましょう。 function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } MVCを意識すれば必然的にHTML中に埋め込むようになって <p><?php echo $id ?></p> もしくは <p><?=$id?></p> とすることが多いと思います(PHP5.4以降であれば後者推奨)。この際、「このデータは安全」「このデータは安全じゃない」といった判断をプログラマがその都度行うこと自体にセキュリティホールを作ってしまう可能性を秘めています。出力する全ての値はh関数によりエスケープし、 <p><?=h($id)?></p> とした方が賢い選択です。 ...というのはあくまで建前の話で、さすがに $_SESSION['id'] といったようなものは明らかに安全であることが分かっていますね。全ての値のエスケープが推奨されるのは、全体で統一していた方が美しいから、といった理由もあると思います。今日のCPUスペックからすれば多少処理が増えたところでレスポンスタイムに全く影響しませんしね。
その他の回答 (1)
- agunuz
- ベストアンサー率65% (288/438)
>SESSION変数を表示するときはhtmlspecialcharsを使ったほうがいいでしょうか? 何が入っているかに依存です。 例示されている$_SESSION['id']のようなものならhtmlspecialcharsする必要があるとは思えませんが、フォームから入力されたデータを持ち回るのにセッションに入れたなんてケースでは当然必須です。 ∴ 悩みたくなければhtmlspecialcharsを使っておけばいいと思います。 なおhtmlspecialcharsした結果を変数に格納する意味はないので(ブラウザに返すとき限定のエスケープなので) $xxx = htmlspecialchars($_SESSION['xxx'], ENT_QUOTES); echo $id; ではなく echo htmlspecialchars($_SESSION['xxx'], ENT_QUOTES); と書くべきだと思います。
お礼
回答ありがとうございます フォームから入力された値はhtmlspecialcharsをつかって、サーバー側のみで作った値は使わない方向でやっていこうと思います。ありがとうございました 今回は$_SESSION変数にはフォーム入力やgetからは使っていないので今回は必要なさそうです
お礼
回答ありがとうございます やっぱり普通は安全ですよね 参考になりました。ありがとうございました