-1

私は常に、開発中のほとんどのSQL コマンドにストアド プロシージャを使用することを好みます。selectステートメントの1つの例.私はこのStore porcedureを使用します

ALTER proc [dbo].[sp_select] (@tbl varchar(200),@col varchar(max),@cond varchar(max))
as
declare @query varchar(max)
if(@cond!=NULL)
begin
set @query='select '+@col+' from '+@tbl+' where '+@cond
end
else
begin
set @query='select '+@col+' from '+@tbl 
end
exec(@query)
GO

私はSQLインジェクション攻撃をほとんど意識していません。この道はそのような攻撃から安全かどうか??

任意の提案をいただければ幸いです...

4

2 に答える 2

0

いいえ。SQL インジェクションに対して非常に脆弱です。たとえば、誰かがそうするとします。

exec dbo.sp_select '@Dummy', '(Select Null) As x; Update Employee Set Salary = 1000000 Where EmployeeName = ''me''; Declare @Dummy Table (i int); Select Null ', null

作成して実行するクエリは

select (Select Null) As x; Update Employee Set Salary = 1000000 Where EmployeeName = 'me'; Declare @Dummy Table (i int); Select Null  from @Dummy

選択のみを行うはずのストアド プロシージャが、私の給与を 1,000,000 に更新しました。

于 2013-07-08T17:08:58.550 に答える