URLは
- MySQL データベースに保存
- ユーザーのプロフィールに写真を表示するために使用されます
strip_tags() と mysql_real_escape_string() で十分でしょうか?
URLは
strip_tags() と mysql_real_escape_string() で十分でしょうか?
「十分なサニタイズ」は、話している環境に完全に依存します。MySQL のサニタイズは、Web 出力のサニタイズとは完全に別のものと見なす必要があり、多くの面倒を避けるために、それらを別々に処理する必要があります。
MySQL のサニタイズ
mysql_real_escape_string()
データの一部をサニタイズし、SQL クエリ内に安全に配置できるようにします。出力のサニタイズ
htmlspecialchars($val)
文字はエンティティ表現に変換され、タグ区切り文字としてレンダリングされないため<
、出力時に悪意のあるタグがレンダリングされるのを防ぎます。>
ENT_QUOTES
次のように、HTML 要素の quoted 属性内にあるものを出力する場合は、修飾子を使用します。<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
特別な要件がない限り、これで十分です。 strip_tags()
不適切な形式の HTML でだまされる可能性があるため、実際にはサニタイズに使用しないでください。サニタイズは価値のある目標であり、コンテキストを分離しておくことができれば、コンテキスト間のデータ操作で発生する問題が少なくなります。
strip_tags() をカウントする代わりに、文字列に対して htmlentities() を呼び出す方がおそらく安全で優れています。
strip_tags() は、次のような html 特殊文字を削除しません'"&
たとえば、コードが次の場合:
<img src="<?= strip_tags($myVar) ?>">
と
$myVar = '">something goes here<';
その後、次のようになります。
<img src="">something goes here<">
これは明らかに XSS ホールの根源です。実際のエクスプロイトは、読者の演習として残されています。
私は最初にフランクの答えに賛成しましたが、問題を考えました: htmlentities() は次のような正当な URL を壊します:
http://www.mywebsite.com/profile?id=jojo&w=60&h=60
山かっこを取り除く + mysql_real_escape で十分でしょうか?