現在、を使用してhtmlspecialchars(mysql_escape_string($value))いますが、ネストされたステートメントではなく、1つのステートメントでサニタイズする方法はありますか?
2 に答える
さて、それらの両方を処理する1つの関数はありません。プリペアドステートメントとhtmlpuffierクラスを使用できます。そうすれば、「ルックアンドフィール」が少し良くなるでしょう:)
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つのページで適切にエスケープされないバグがサイトにある場合は、ページを更新してすべてを修正できます。データがデータベースに誤って保存されるというバグがサイトにある場合は、データベース内のすべてを修正する必要があります(これにははるかに時間がかかり、より多くのユーザーに害を及ぼします)。