3

SQL インジェクションを防ぐために、ストアド プロシージャの入力をパラメータ化したいと考えています。問題は、私のデータベースにアプリケーションがないことです(これは学校用です)。C#などのクライアント言語がないため、SQL自体で行う必要があります。これは私がしました

ALTER procedure [dbo].[drop_tt]
@ss varchar(40)
as
EXEC sp_executesql N'SELECT *
FROM    tt
whERE   ss = @Ss', N'@ss varchar(40)', @ss

しかし、このステートメントを実行すると、tt テーブルが削除されました :( exec drop_tt 'www';drop table tt--'

誰でも助けることができますか?

4

1 に答える 1

1

要するに、なぜspを変更しているのですか? 次のようなパラメータ化されたストアド プロシージャを作成するだけです。

CREATE PROCEDURE uspGetAddress @City nvarchar(30)
AS
SELECT * 
FROM AdventureWorks.Person.Address
WHERE City = @City
GO

この非常に簡単なチュートリアルを見るだけで、手順を変更する必要はありません。

編集:EXEC sp_executesql私のアプローチは、で始まるステートメントと命名を取り除くことdropです。本体のストアド プロシージャ実行ステートメントを単純化してみてください。

于 2012-12-14T12:35:53.933 に答える