1

次の SQL は、@SearchWord パラメーターを介した SQL インジェクションの影響を受けやすいですか?

FormsOf 関数でパラメーターを使用したいのですが、私が見つけた唯一のガイドは、このスタック オーバーフローの質問にあります: How to pass parameter to FormsOf function in sql server

ただし、解決策は少し動的 SQL を使用することであると思われ、それが SQL インジェクションの影響を受けやすいかどうか疑問に思っていました。次の例で、@searchWord に SQL インジェクション タイプの文字列が含まれている場合はどうなるでしょうか? FREETEXTTABLE に引数として渡されたパラメーター内にあるため、問題ではないでしょうか?

与えられた解決策は次のとおりです。

DECLARE @SearchWord nvarchar(max)
SET @SearchWord = 'tax'

DECLARE @SearchString nvarchar(max)
SET @SearchString = 'FormsOf(INFLECTIONAL, "' + @SearchWord + '")'

SELECT listing_id, RANK, name, address, city, zip, heading, phone 
FROM listings a, 
FREETEXTTABLE(listings, *, @SearchString)
WHERE [KEY] = a.listing_id
ORDER BY RANK DESC, name
4

2 に答える 2

2

いいえ、影響を受けません。ここには動的 SQL がないため (EXECまたはを使用する必要がありますsp_executesql)、SQL インジェクションのベクトルはありません。

SQL インジェクションの脆弱性が存在するためには、ユーザーが指定した文字列 (この場合@SearchWordは ) が実際に SQL ステートメントのテキストに直接挿入される必要があります。ここでは、別の文字列変数を作成するためにのみ使用され、その後別の SQL ステートメントのパラメーターとして使用されます。

ただし、このステートメント、ユーザーが「無効な」検索語、つまり単一引用符を含む検索語を入力すると失敗する@SearchWord可能性があるため、渡される値が何であれ、エスケープする必要があります。ただし、任意の SQL の実行には使用できません。

于 2010-04-07T15:03:19.437 に答える
1

私はこれをテストしていませんが、インタプリタが単にの値を@SearchStringステートメントに貼り付けているとは思いません。@SearchStringFREETEXTTABLEが期待するルールを使用して解析する必要があります。これは、他のパラメーターが機能する方法です。

于 2010-04-07T14:56:28.000 に答える