2013-05-07 18 views
1

設置我的變種:這是否爲SQL注入打開了大門?

Foo = request("Bar") 

構建SQL查詢:

John.Source = "SELECT ID, Name FROM dbo.USER where Name = '"&Foo&"' and ID = '1'" 

我發現這個在某人的項目,這是否開放SQLI門?

+0

從哪裏請求'Foo'? – Christian 2013-05-07 13:34:49

+0

這是如果「酒吧」暴露於外部世界(從用戶輸入,其他系統等獲得它的價值)。例如。 Bar = x';從dbo.USER刪除;提交 - – 2013-05-07 13:43:17

+2

你應該使用參數化查詢到你的數據庫,更安全 – Max 2013-05-07 13:55:26

回答

7

絕對。 request("Bar")將取消Request.QueryStringRequest.Form集合中的參數。

這意味着你可以在理論上標籤下面到查詢字符串:

'; delete * from dbo.USER; select * from user where name=' 

,這將給你的

SELECT ID, Name FROM dbo.USER where Name = ''; delete * from dbo.USER; select * from user where name='' and ID = '1' 

由於評論者一說一查詢,使用參數化查詢,而不是。

如果這確實不是一個選項,那麼一定要轉義從Request集合中獲取的值。此鏈接可能有所幫助:http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx

2

是的。您需要在將值插入查詢之前對值進行清理。或者使用參數化查詢,這是一個更安全的選擇。