11

を使用SqlParametersすることは、データベース クエリでの SQL インジェクションを防ぐために推奨される方法です。これらのパラメーターを内部的にサニタイズするコード/関数はどこにありますか? 私のカスタム実装でこの関数を再利用したいと思います。Reflector を使用して検索しようとしましたが、失敗しました。

4

1 に答える 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 に答える