$_SESSION 関数のサニタイズについて


例えば下記のようなコードの場合、
$_SESSIONに不正なコードが入れられる可能性はありますでしょうか?
(出力時にサニタイズ必要でしょうか?)

$_SESSION['hoge'] = htmlspecialchars($_POST['hoge']);

※hogeは、GET,POST,DB等では取得せず、直接ファイルに記述する。

セッション乗っ取られたらダメなような気はして、調べているところです。。。

回答の条件
  • 1人2回まで
  • 登録:2008/10/04 08:07:29
  • 終了:2008/10/04 13:53:56

ベストアンサー

id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/10/04 10:01:25

ポイント35pt

基本的には考え方としては合ってるけど、実装上の問題はあるらしい。

htmlspecialchars/htmlentitiesの正しい使い方


セッションは乗っ取られようがなんだろうがセッションファイル(またはそれに相当するもの)

がサーバー上にある限り、直接はさわられることはない。

もちろんセッションハイジャックされる事自体の問題はいったん置くとして、だが。


ただし、それはそれとして htmlspecialchars を使用するタイミングは間違っている。

「サニタイズ言うなキャンペーン」私の解釈

上記URLのDBの部分をセッションに置き換えてみてほしい。


結論としては、「あなたの心配している問題は無いが、他の側面からの問題はある」と言うことになる。

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/10/04 09:09:29

ポイント35pt

PHPについてのご質問ということでよろしいですね。

失礼ながら、「サニタイズ」と「セッション・ハイジャック」(乗っ取り)を混同していませんか。


サニタイズを行う前に、まず、その入力データの利用目的を特定します。

$_SESSION['hoge'] の内容を静的な HTML ページに表示するだけであれば、関数htmlspecialcharsを使ったサニタイズは有効です。

しかし、たとえば $_SESSION['hoge'] を使って数値演算を行うなら、数値以外の文字が含まれていないことをチェックする必要があります。

このように、サニタイズとは、入力データの利用目的に応じて臨機応変に行うものです。


一方、セッションハイジャックとは、セッションIDやCookieなど、セッションを識別するための値を盗んだり偽装したりして $_SESSION 変数に入れられてしまう場合を指します。

これはサニタイズして防げる性質のものではなく、他の防衛手段を用意する必要があります。


参考サイト

id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/10/04 10:01:25ここでベストアンサー

ポイント35pt

基本的には考え方としては合ってるけど、実装上の問題はあるらしい。

htmlspecialchars/htmlentitiesの正しい使い方


セッションは乗っ取られようがなんだろうがセッションファイル(またはそれに相当するもの)

がサーバー上にある限り、直接はさわられることはない。

もちろんセッションハイジャックされる事自体の問題はいったん置くとして、だが。


ただし、それはそれとして htmlspecialchars を使用するタイミングは間違っている。

「サニタイズ言うなキャンペーン」私の解釈

上記URLのDBの部分をセッションに置き換えてみてほしい。


結論としては、「あなたの心配している問題は無いが、他の側面からの問題はある」と言うことになる。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません