5

FILTER_SANITIZE_STRING変数(人間の入力によって入力された)を使用すると、奇妙な問題が発生します。<文字とその後のテキストを削除するようです。>キャラクターは手付かずのままです。

は削除する必要がある HTML タグであると考えていると思い<ますが、その後ろに終了タグがないため、なぜそのように動作するのかわかりません。所定の位置に置いたまま、<本来の方法でサニタイズする方法はありますか?

4

1 に答える 1

6

根本的な問題は、FILTER_SANITIZE_STRINGHTML タグを削除するために使用すると、入力を HTML として処理することです。あなたの説明によると、あなたの入力はプレーンテキストです。そのため、ユーザーがすでに報告しているように、フィルターは入力データのみを破損する可能性があります。

これは非常に一般的な手法のようですが、サニタイズ方法としてプレーン テキストに HTML タグをストライピングするという概念を理解したことがありません。HTML でない場合は、SQL キーワードやコマンド ライン コマンドを気にする必要がないのと同じ理由で、HTML タグを気にする必要はありません。それはデータに他なりません。

ただし、もちろん、後で文字列を HTML に挿入するときは、次のことを確認するためにエスケープする必要があります。

  1. データはそのまま表示されます
  2. 結果はまだ有効な HTML です

それがhtmlspecialchars()が存在する理由です。同様に、SQL、JavaScript、JSON など、他の種類のコードを動的に生成する場合は、対応するエスケープ メカニズムを使用する必要があります。

于 2013-04-13T15:19:09.843 に答える