POSTメソッド、GETメソッドのサニタイジング、エスケープ処理の今現在の流儀 はなんでしょうか?

Tumblr1,799閲覧

ベストアンサー

この回答はいかがでしたか? リアクションしてみよう

「サニタイズ言うなキャンペーン」でも言及されていますが、 『悪意のある入力があるかもしれないから何か処理を施す』 という考え方は捨てるべきです。 『入力された "text/plain" を "text/html" として表示させたいならhtmlspecialcharsを必ず通さなければならない』 という考え方が正しいです。それ故にエスケープするタイミングも「HTMLとして出力する直前」が妥当です。 【脆弱性対策におけるhtmlspecialchars()の使用箇所について】 http://ja.stackoverflow.com/questions/2408/%E8%84%86%E5%BC%B1%E6%80%A7%E5%AF%BE%E7%AD%96%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bhtmlspecialchars%E3%81%AE%E4%BD%BF%E7%94%A8%E7%AE%87%E6%89%80%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/2420#2420

ThanksImg質問者からのお礼コメント

本当に参考になりました。 ありがとうございます。

お礼日時:2015/4/4 22:05

その他の回答(3件)

入力値の検証と出力値の無害化はまったく別の処理だ。 入力値のフィルタは、特定の値以外の入力を防ぎたい時に行う。 それはそれとして、信用できない値をコードとして解釈される文脈で(つまりHTMLになりうる場所に書き出すとか、SQLを組み立てるとか、シェルに渡すコマンドとして組み立てるとか)使う場合は、その用途に応じた変換処理(エスケープ)をかける。 HTMLを書き出す時の変換処理としては、htmlspecialchars()が必要十分だ。htmlentities()は過剰。こいつは例えば日本語を含む出力ファイルをpure ASCIIとして表現したい、などの非常に特殊なケースで使う。 入力値に対する処理と、出力時の処理は、「両方」やるのが正解だ。数値の入力を受けてHTMLを書き出すなら、filter_var()かなんかで入力値が数値であるかを検証すべきだし、出力の際はhtmlspecialchars()をかけるべきだ。

お忙しい中ご回答ありがとうございます。 >HTMLを書き出す時の変換処理としては、htmlspecialchars()が >必要十分だ。htmlentities()は過剰。こいつは例えば日本語を含 >む出力ファイルをpure ASCIIとして表現したい、などの非常に特 >殊なケースで使う。 >入力値に対する処理と、出力時の処理は、「両方」やるのが正解 >だ。数値の入力を受けてHTMLを書き出すなら、filter_var()かな >んかで入力値が数値であるかを検証すべきだし、出力の際 >はhtmlspecialchars()をかけるべきだ。 なんとなくイメージが湧いてきました。

ID非表示

2015/4/2 18:42

いまどきXSS対策なんかしねぇ~よ。何十年前の話だよw そんなのサーバ側で自動でやってくれるよw XSS対策はめんどくせぇ~んだよw

>illter_inputはXSSとSQLインジェクション両方の入力を文字列のエスケープ処理、サニタイジングするために使われる。 SQLインジェクション対策に使うというのは初耳です。どこに書かれていた情報でしょうか? filter_inputは使うフィルタの違いで守備範囲が相当に広いのですが、どれを念頭に置かれていますか?POST/GETということですから、filter_inputの第一引数(type)がINPUT_POSTやINPUT_GETでの話だと思いますが・・・ http://www.php.net/manual/ja/filter.filters.php >htmlspecialcharsはあまり使われませんか? まず、htmlspecialcharsは「出力時」のエスケープであってPOST/GETで受け取ったときに使うものではありません。 私は出力時にはよく(というか必ず)使います。逆にhtmlentitiesを使って「適用可能な文字を全て HTML エンティティに変換する」必要はほとんどありません。htmlソース(の一部)として出力するときにはhtmlspecialcharsでじゅうぶんです。

ご回答ありがとうございます。 http://w3schools.invisionzone.com/index.php?showtopic=36049 http://stackoverflow.com/questions/7195077/php-input-filtering-using-new-5-2-want-to-change-from-post-get-how-to-saniti http://www.php.gr.jp/seminar/20070901/data/phpcon2007-yahoo.pdf などです。input_filterとfilter_inputは違うのかな? >まず、htmlspecialcharsは「出力時」のエスケープであってPOST/GETで受け取ったときに使うものではありません。 はい。これは認識しています。ちょっと説明の仕方を間違えたようです。申し訳ございません。 >「適用可能な文字を全て HTML エンティティに変換する」必要はほとんどありません。 ほとんどないのであれば、なぜその関数が存在するのか、使うのであればいつ、どういうときに使うかまたは、htmlspecialcharsとの違いを知りたいのです。