質問

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

役に立ちましたか?

解決

XSS ではなく SQL インジェクションから保護します。 コードや機能はありません パラメータデータをサニタイズします。

保護は、パラメータ値をクエリ文字列とは別にサーバーに送信することによって実現されます。 一度もない SQL ステートメントに直接置換されます。

したがって、SQL Server の代わりに次のようなものを実行します。

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 にエンコードされます。正しい?

いいえ、それは正しくありません。変数はデータ ブロックから直接作成されるため、特別なエスケープやエンコードは必要ありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top