2012-01-23 81 views
0

我看到了一些類似的問題,沒有關於mysql ...
有沒有辦法做一個SQL注入SP? 我如何在SP級別上進行保護?
換句話說,SP中的查詢結構可以通過傳入參數以任何方式修改嗎?
如果我發送到存儲過程中參數「1; DELETE FROM用戶; - 」 和查詢:是否可以使用存儲過程執行sql注入?

select * 
from T 
where = @p 
+0

什麼是您的編程媒介?如果你擔心它直接發生,防止sql注入是多餘的。 –

+0

@布里安格雷厄姆 - 我使用PHP,你的意思是最好的方法是通過PDO消毒這個? –

+0

假設用戶界面是一個Web界面,你會在輸入字段上執行html編碼或javascript編碼。如果它是一個桌面應用程序,你可以做類似的事情,我會想象。如果您擔心存儲過程本身的sql注入,那麼這是一個不同的問題。也許編寫一些自定義的正則表達式並在將它們傳遞給sql命令之前通過它們運行變量。 – Brian

回答

5

SQL注入是,基本上,增加額外的代碼來查詢。攻擊本身的發生是因爲服務器將輸入數據解析爲SQL代碼並相應地執行它。您無法在SP級別上進行保護,因爲執行到達該過程時,攻擊已經成功。

因此,只要您將查詢構建爲文本,無論查詢文本是什麼,SQL注入都是可能的。如果你不這樣做,或者如果你正確地處理你的輸入,那麼SQL注入不應該成爲一個問題,不管它是SELECT還是別的。

+0

其實這是一個很好的答案。如果在你的存儲過程中,你通過CONCAT()創建來自參數(或其他外部源)的字符串的查詢,那麼這個SP很容易被注入。否則你很安全。 – Mchl

相關問題