このSQLインジェクションの問題に関する少しの助けが必要です。パラメータ化されたプロシージャを使用したSQLインジェクション
以下は、パラメータ化されたストアドプロシージャのバージョンです。アプリケーションからの呼び出し方法を除いて、@v_stringが動的SQLとして扱われることを防ぐにはどうしますか?
これはかなり水密だと思います。実行または連結されたSQLはありませんが、セミコロンを挿入しても、追加のデータが返されます。
私はこの質問を考慮するには複数のレベルがあることを知っていますが、注入不具合の大部分が動的クエリを含むため、ここでは欠けている単純な解決策があるかどうかを知りたいと思います。
create table dbo.Employee (EmpID int,EmpName varchar(60))
declare
@v_id int,
@v_string varchar(60)
begin
set @v_string='test'''; waitfor delay '0:0:5' --
if @v_id is null
begin
set @v_id = (select EmpID
from Abc.Employee
where [email protected]_string);
end
print @v_id
end
唯一問題が発生するのは、SPがユーザーが直接提供するクエリ内のパラメータを使用し、selectステートメントに直接連結されている場合です。パラメーター)。 –
"セミコロンを挿入すると、追加のデータを返すことができます。私はそれがどうなるか見ることができません。あなたはこのセミコロンをどこに挿入しているのか、余分なデータが返されていることをどのように知っているのか、詳細を教えてください。 –
select *とsys.databasesからwaitfor delayを置き換えてください。 –