0
SQL Server 2005/2008を使用していますが、EXECステートメントの生成に文字列連結を使用しないストアドプロシージャがありますが、ストアドプロシージャの動的名が使用されます。文字列連結のないストアドプロシージャSQLインジェクションの脆弱性
@stored_procedure_nameと潜在的に@object_nameパラメータは両方とも脆弱だと思います。しかし、私が読んだすべての動的SQLリンクは、文字列の中でSQL文を連結していると仮定しているため、実際にはOKかどうか疑問に思っています。
これを投稿するだけで、テーブルオブジェクトを呼び出すことによってコードを一般化しました。したがって、必ずしも論理的な意味をなすわけではありません。ここで
コードです:
CREATE PROCEDURE [dbo].[my_dodgy_sp]
@object_name varchar(50) = 'All'
AS
BEGIN
DECLARE @stored_procedure_name varchar(100);
DECLARE object_cursor CURSOR FOR
SELECT stored_procedure_name
FROM [dbo].[objects]
WHERE [stored_procedure_name] <> ''
AND ([name] = @object_name)
OPEN object_cursor
FETCH NEXT FROM object_cursor
INTO @stored_procedure_name
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @stored_procedure_name @object_id OUTPUT;
FETCH NEXT FROM object_cursor
INTO @stored_procedure_name
END
CLOSE object_cursor;
DEALLOCATE object_cursor;
END