2013-03-30 26 views
4

我有一個存儲過程,它將根據用戶輸入到標準搜索文本框中的內容返回搜索結果。在搜索框中按下後,我將查詢傳遞給search.aspx?q =無論用戶輸入什麼內容。存儲過程查詢中的SQL注入

search.aspx具有接受查詢字符串paramater並調用存儲過程,而加入了一些表,幷包含一個SqlDataSource以下where子句...

where (description like '%' + @query + '%' or title like '%' + @query + '%' or  calls.call_id like @query or r.firstname = @query or r.lastname = @query 
or n.note like '%' + @query + '%') 

...這是SQL注入安全即使用這樣的參數?

謝謝,

+0

不,它不是,它如果遠離安全。 – ljh

+0

我問過那麼好的工作!推薦什麼? – thegunner

+0

@ljh你會關心嗎?該查詢通過使用參數來清理輸入。它對我來說看起來很安全。 – Dan

回答

3

不,這是不容易SQL注入,因爲它使用SQL參數。比方說,有人試圖通過提供爲@query值進行SQL injection

'; DROP TABLE STUDENTS;

你還在用你提供的代碼安全的,因爲查詢是與參數的例外是不是所有的你SQL;這是一個字符串。即使該字符串包含SQL,它也不會執行,除非您的存儲過程實際上是executed它。永遠不要這樣做(除非你有一個非常好的理由(但即使如此,你應該首先重新設計))。只需使用參數來消毒用戶輸入即可輕鬆避免SQL注入。

+0

好歡呼@丹! – thegunner

+2

ahhh,正確的,即使您要在SP中使用動態SQL,然後使用「sp_executesql」執行sql字符串並將參數傳遞給它,它也需要是動態sql(即'exec(@query)') – didierc

+1

。 – highwingers