8

URLは

  1. MySQL データベースに保存
  2. ユーザーのプロフィールに写真を表示するために使用されます

strip_tags() と mysql_real_escape_string() で十分でしょうか?

4

3 に答える 3

16

「十分なサニタイズ」は、話している環境に完全に依存します。MySQL のサニタイズは、Web 出力のサニタイズとは完全に別のものと見なす必要があり、多くの面倒を避けるために、それらを別々に処理する必要があります。

MySQL のサニタイズ

  • mysql_real_escape_string()データの一部をサニタイズし、SQL クエリ内に安全に配置できるようにします。
  • 文字列内の HTML タグなど、その他の種類の悪意のあるデータは完全に無視する必要があります。ここでそれを操作しようとすると、後でデータベースから取り出した後で「操作を解除」しようとするので、頭痛の種になります。悪い「Web データ」がデータベースに損害を与えることはありません。

出力のサニタイズ

  • htmlspecialchars($val)文字はエンティティ表現に変換され、タグ区切り文字としてレンダリングされないため<、出力時に悪意のあるタグがレンダリングされるのを防ぎます。>
  • ENT_QUOTES次のように、HTML 要素の quoted 属性内にあるものを出力する場合は、修飾子を使用します。<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />

特別な要件がない限り、これで十分です。 strip_tags()不適切な形式の HTML でだまされる可能性があるため、実際にはサニタイズに使用しないでください。サニタイズは価値のある目標であり、コンテキストを分離しておくことができれば、コンテキスト間のデータ操作で発生する問題が少なくなります。

于 2010-01-12T02:56:42.843 に答える
1

strip_tags() をカウントする代わりに、文字列に対して htmlentities() を呼び出す方がおそらく安全で優れています。

strip_tags() は、次のような html 特殊文字を削除しません'"&

たとえば、コードが次の場合:

<img src="<?= strip_tags($myVar) ?>">

$myVar = '">something goes here<';

その後、次のようになります。

<img src="">something goes here<">

これは明らかに XSS ホールの根源です。実際のエクスプロイトは、読者の演習として残されています。

于 2010-01-12T02:28:12.557 に答える
0

私は最初にフランクの答えに賛成しましたが、問題を考えました: htmlentities() は次のような正当な URL を壊します:

http://www.mywebsite.com/profile?id=jojo&w=60&h=60

山かっこを取り除く + mysql_real_escape で十分でしょうか?

于 2010-01-12T02:35:00.227 に答える