2016-12-23 4 views
0

ストアドプロシージャで動的SQLを使用する必要があります。SQLインジェクションを引き起こす可能性のある文字を削除する関数

動的SQLはSQLオブジェクトを作成するため、パラメータ化してsp_executesqlで実行することはできません。

ストアドプロシージャのパラメータ変数をチェックし、不正な文字があるかどうかを教えるSQL関数がありますか?またはそれらを削除するか、これらの文字のリストがありますか?

DECLARE @variable = 'password OR 1=1' 

IF IsSqlInjectionPossible(@variable) 
BEGIN 
    RAISERROR('Illegal input characters',16,1) 
    RETURN 
END 

またはあなたがそれを行うにはどうすればよい

SET @variable = removePossibleSqlInjection(@variable) 

よう

何か?

答えて

2

ストアドプロシージャのパラメータ変数をチェックし、不正な文字があるかどうかを教えるSQL関数がありますか? NO「SQLインジェクションを引き起こす可能性があります文字」が存在しないという理由だけで

にはそのような機能はありません、それだけですることはできません。注射に使用されるすべての文字は完全に合法です。あなたのSQLインジェクションの考え方は間違っています。ウィルスやバクテリアのようなクエリーにとって唯一のものではなく、通常のSQLです。つまり、SQLクエリで使用される文字を禁じるだけで、この関数はクエリを効果的に消去します。

あなたは違法とみなされますか?'password OR 1=1'の文字はありますか?

1

あなたは、ユーザーが友人の公開データを要求できるフォームがあると考えてみましょう。私たちは、さらにそのフォームのポストIDを想定してみましょう、あなたはあなたのクエリ内の数値として使用していること:

select public_details 
from users 
where ID = 5 

IDは、ユーザーから取得した値です。ユーザーが検索しているIDを選択できるようにすることはまったく安全ではありませんが、今の例ではこれを無視してください。ユーザーが次のように投稿を送信した場合、今すぐ

アポストロフィはありません。したがって、これはビジネスロジックの問題であり、アプリケーションレベルで対処する必要があるという問題があります。

関連する問題