電子書籍の厳選無料作品が豊富!

プログラム初心者です

htmlspecialcharsを省略するか迷っています
SESSION変数を表示するときはhtmlspecialcharsを使ったほうがいいでしょうか?

$id = htmlspecialchars($_SESSION['id'], ENT_QUOTES);
echo $id;

よろしくおねがいします

A 回答 (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スペックからすれば多少処理が増えたところでレスポンスタイムに全く影響しませんしね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
やっぱり普通は安全ですよね
参考になりました。ありがとうございました

お礼日時:2014/02/18 14:41

>SESSION変数を表示するときはhtmlspecialcharsを使ったほうがいいでしょうか?



何が入っているかに依存です。

例示されている$_SESSION['id']のようなものならhtmlspecialcharsする必要があるとは思えませんが、フォームから入力されたデータを持ち回るのにセッションに入れたなんてケースでは当然必須です。

∴ 悩みたくなければhtmlspecialcharsを使っておけばいいと思います。


なおhtmlspecialcharsした結果を変数に格納する意味はないので(ブラウザに返すとき限定のエスケープなので)

$xxx = htmlspecialchars($_SESSION['xxx'], ENT_QUOTES);
echo $id;

ではなく

echo htmlspecialchars($_SESSION['xxx'], ENT_QUOTES);

と書くべきだと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
フォームから入力された値はhtmlspecialcharsをつかって、サーバー側のみで作った値は使わない方向でやっていこうと思います。ありがとうございました
今回は$_SESSION変数にはフォーム入力やgetからは使っていないので今回は必要なさそうです

お礼日時:2014/02/18 14:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!