2011-06-29 75 views
2

我必須連接到一個現有的存儲過程,在數據庫中保存一行文本。 現在我已經看到了sp,它是一個連接的字符串(我的文本被放置在該文件中)並且它與exec(@sql)一起執行。exec sql避免sql注入的替代方法是SP_EXECUTESQL?

由於文本來自公共網站,我必須確保沒有SQL注入是可能的。

該數據庫的傢伙沒有聽說過SQL注入,所以他不知道該怎麼做,但因爲我不想暴露我的應用風險,我想知道可以做些什麼來防止sql注入。然而,我是比sql更程序員。

現在我已經找到'SP_EXECUTESQL(@SQL)'存儲過程,這將有助於防止sql注入,還是仍然有可能進行惡意調用?

在此先感謝您的幫助。

+0

向我們展示SQL語句的任何機會(當然是爲公共消費消毒)?如果你已經在使用參數,那麼你可能是安全的。 –

+0

原來,sql的人可以很容易地用正常的存儲過程替換exec(@sql)。 – Michel

回答

2

請查看SP_EXECUTESQL(@SQL)的MSDN文檔:http://msdn.microsoft.com/en-us/library/ms188001.aspx

報告警告說,

運行時編譯的Transact-SQL語句 可以公開的應用程序 惡意攻擊,如SQL注入 。

也可以看看這裏:http://msdn.microsoft.com/en-us/library/ms175170.aspx

我會強烈建議不要從任何用戶信任任何輸入!

你能改變查詢以某種方式參數化嗎?

+0

是的,我已閱讀文章,但它也說'Transact-SQL語句或批處理可以包含嵌入式參數'。我認爲使用參數將有助於防止SQL注入? – Michel

+0

是的,使用參數可防止SQL注入。 'SP_EXECUTESQL()'支持比普通的'EXEC'更高效的運行,但是具有相同的安全問題。 –

+0

好的,謝謝,那我就找點別的了。 – Michel