3

TextAreaのウェブサイトには、入力をデータベースに書き込むがあります。

この入力をフィルタリングしたいのですTextAreaが、HTML タグやその他のものを削除する必要はありません。

要するに、データベースに書き込む前に入力をサネタイズして保護したいのですが、データベースからエントリを取り戻してウェブサイトに書き込むときに、エントリを無傷で変更しないでおきたいのです。

どうすればこれを達成できますか?

4

3 に答える 3

3

If you mean you simply want to make it safe to store in your database all you need to do is use the database specific escaping method, for example mysql_real_escape_string. Of course, that doesn't secure you from XSS attacks, but if you want to retrieve and display it unmodified you don't have a choice.

于 2011-03-03T01:31:37.923 に答える
3

ウェブサイトに書き戻すときに文字ごとにデータを保持したい場合は、次のことを試してください。

$stringToSave = mysql_real_escape_string($inputString);

次に、データベースから取得するとき:

$stringToPutOnPage = htmlentities($databaseString);

html を実際に html として読みたい場合 (XSS に注意してください)、以下を使用できます。

$stringToSave = mysql_real_escape_string($inputString);

編集: html の文字列をデータベースから取得する前ではなく、取得した後にサニタイズすることをお勧めします。コメントありがとうございます。方法を変更する必要があります。

于 2011-03-03T01:38:35.437 に答える
2

それは本当に簡単です:

  • SQL インジェクションを回避mysql_real_escape_stringするには、SQL クエリに連結する前に値を使用するか、そもそも不正な文字列の影響を受けないパラメーター化されたクエリを使用します。
  • XSS の問題や HTML の混乱を避けるために、HTML は値を HTML コンテキストにプラグインする前にエスケープします。
  • JSON は JSON コンテキストでそれらをエスケープし、CSV は CSV コンテキストでそれらをエスケープします。

本当に、どれも同じ問題です。非常に単純な例として、文字列を生成するために"test"(引用符を文字列の一部にしたい)、文字列literal を書くことはできません$foo = ""test""。どの引用符が文字列を終了するはずで、どれが文字列の一部であるかを明確にするために、引用符内の引用符をエスケープする必要があります: $foo = "\"test\"".

SQL インジェクション、XSS の問題、およびめちゃくちゃな HTML はすべて、これのバリエーションにすぎません。
引用符を含む値をクエリに挿入するには、上記と同じ問題があります。

$comment = "\"foo\"";  // comment is "foo", including quotes
$query = 'INSERT INTO `db` (`comment`) VALUES ("' . $comment . '")';
       // INSERT INTO `db` (`comment`) VALUES (""foo"")

これにより、せいぜい無効な構文が生成され、最悪の場合、SQL インジェクション攻撃が生成されます。を使用すると、これをmysql_real_escape_string回避できます。

$query = 'INSERT INTO `db` (`comment`) VALUES ("' . mysql_real_escape_string($comment) . '")';
       // INSERT INTO `db` (`comment`) VALUES ("\"foo\"")

HTML エスケープはまったく同じですが、構文の問題が異なります。
適切な方法を使用して、適切なコンテキストで値をエスケープするだけです。HTML の値をエスケープするには、 を使用しますhtmlentities。必要なときにそれを行います。値を時期尚早または過剰にエスケープしないでください。適切なコンテキストで適切なタイミングで適切なエスケープ関数のみを適用してください。

于 2011-03-03T02:21:11.377 に答える