0

現在、を使用してhtmlspecialchars(mysql_escape_string($value))いますが、ネストされたステートメントではなく、1つのステートメントでサニタイズする方法はありますか?

4

2 に答える 2

2

さて、それらの両方を処理する1つの関数はありません。プリペアドステートメントとhtmlpuffierクラスを使用できます。そうすれば、「ルックアンドフィール」が少し良くなるでしょう:)

于 2013-01-03T13:29:49.173 に答える
1

mysql_real_escape_string最近、実際に支持を失っています。

現在、PDOまたはを使用することが推奨されていますmysqli。どちらもデフォルトでPHPに付属しています。parameterized queriesSQLコマンドを自分で作成するのではなく、呼び出されたものを使用してデータベースにアクセスします。これは、クエリと変数が別々に関数に渡されるため、エスケープについて心配する必要がないことを意味します。

PDOの詳細については、http: //net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/をご覧ください。

関連する注記として、を使用するのではなく、ユーザーが入力した入力を「作成されたとおりに」データベースに格納するのが一般的ですhtmlspecialchars。次に、サイトのどこに表示されていても、を使用htmlspecialcharsしてデータをエスケープする必要があります。これはOWASPが推奨する規則です。

これは、コンテキストに応じてさまざまなものをエスケープする必要があるためです。この文字列:

' <script src="http://example.org/malice.js"></script> ]}\\\\--

... JSON(引用符と円記号をエスケープ]する}必要がある)、HTML(引用符と<sをエスケープする必要がある)、またはURL(ほとんどすべてがエスケープされます)。JavaScriptにHTMLのエンコードを解除するように指示するのに時間を費やす必要がある場合、コードはすぐに混乱します。

このアプローチにより、バグの修正も簡単になります。コンテンツが1つのページで適切にエスケープされないバグがサイトにある場合は、ページを更新してすべてを修正できます。データがデータベースに誤って保存されるというバグがサイトにある場合は、データベース内のすべてを修正する必要があります(これにははるかに時間がかかり、より多くのユーザーに害を及ぼします)。

于 2013-01-03T13:43:19.393 に答える