2013-08-12 40 views
2

我運行的ASPX和SQL Server支持的Web應用程序,現在我想禁用多個語句的執行,如select 1,2,3; select 1,2,3在SQL Server中禁用多個語句?

所以,我可以禁用該功能,或是否需要修改連接字符串,使這行得通?

+4

你不能。除此之外,你爲什麼要這樣做? –

+2

您是否試圖保護自己免受SQL注入? –

+0

@ MarkStorey-Smith我發現MySQL可以手動禁用該功能,然後我想到了MSSQL。請檢查我的回覆Sebastian – daisy

回答

7

Microsoft SQL Server沒有限制每批語句數量的選項。

雖然有些SQL注入攻擊依賴於在批處理中注入額外語句,但其他SQL語句只是試圖將語句隨時更改爲自己的優勢。通過實施這個想法可以防止第一種類型。但是,第二種類型不能。

SQL注入的標準的例子是登錄查詢:

SELECT * FROM dbo.users WHERE user_name = '?' and password = '?'; 

如果使用手動參數替代和攻擊類型

admin';-- 

用戶名和任何密碼,應用程序獲取如果真正的管理員輸入了正確的密碼,它將從數據庫獲得相同的響應。

在這次攻擊中,批處理仍然只包含一個語句,所以你的「技巧」不會阻止它。

總的來說,最好是首先防止注射。在使用它構建任何類型的動態語句(不僅僅是SQL語句)之前,請始終驗證所有用戶輸入。

在SQL中使用預準備語句或存儲過程並使用API​​函數替換參數值。

一個很好的起點爲防注入的模式是這樣的TechNet文章:http://technet.microsoft.com/en-us/library/ms161953(v=sql.105).aspx