を使用SqlParameters
することは、データベース クエリでの SQL インジェクションを防ぐために推奨される方法です。これらのパラメーターを内部的にサニタイズするコード/関数はどこにありますか? 私のカスタム実装でこの関数を再利用したいと思います。Reflector を使用して検索しようとしましたが、失敗しました。
質問する
4883 次
1 に答える
24
XSS ではなく SQL インジェクションから保護し、パラメーター データをサニタイズするコードや関数はありません。
この保護は、パラメーター値をクエリ文字列とは別にサーバーに送信することで実現されるため、値が直接 SQL ステートメントに代入されることはありません。
したがって、次のようなものを実行するSQLサーバーの代わりに:
SELECT * FROM [table] WHERE [column] = ParameterValue
それは、次のようなものを実行したかのようです。
DECLARE @ParamValue int
-- //@ParamValue variable is populated from the framework in a safe way
SELECT * FROM [table] WHERE [column] = @ParamValue
これは、パラメーター データを評価する必要がある関数よりも高速で、はるかに安全で堅牢です。このような関数は、カスタム エスケープ文字や将来の機能拡張などを処理するために、非常に複雑にする必要があります (読み方: エラーが発生しやすい)。
これは、問題全体を巧みに回避します。データはデータであり、コードはコードであり、この 2 つが一致することはありません。
削除された他のユーザーへのコメントは、次のように回答します。
値 O'Rourke を渡すと、クエリが壊れないように O''Rourke にエンコードされます。正しい?
いいえ、それは正しくありません。変数はデータ ブロックから直接作成されるため、特別なエスケープやエンコードは必要ありません。
于 2009-05-29T14:06:06.853 に答える