2012-02-05 47 views
0

如果我們使用最安全的方式執行查詢,例如準備好的語句或參數化查詢以防止SQL注入攻擊,那麼是否可以保證在執行時沒有發生任何數據庫錯誤?例如 ,在插入記錄時發送給定類型的無效參數,導致錯誤而不是使用默認值。你能舉一個例子嗎?是否存在缺少sql注入攻擊的錯誤?

+1

是,程序員錯誤可能導致數據庫損壞。準備好的陳述不會阻止這一點。 – 2012-02-05 14:25:47

+0

是的,這是由開發人員,你應該把所有必要的驗證和異常處理代碼 – Devjosh 2012-02-05 14:27:49

回答

0

例如,參數化查詢不會阻止數據庫錯誤是用戶可以提供輸入,只要它不適合數據庫類型,例如在用戶名字段中限制爲50個字符的100,000字的短文。

此外,參數化查詢不會防止重複的主鍵錯誤,如果說他們在註冊表單上請求的用戶名已被使用。

參數化查詢只保證值不會被解釋爲SQL,它不會阻止錯誤任何其他的形式(如SQL語句失敗,因爲數據庫的磁盤空間)

+0

謝謝,重複主鍵是一個很好的例子。 – ahoo 2012-02-05 14:34:34

0

這取決於你使用的數據庫,但是一般來說,根據類型等發生的轉換通常是隱含的,所以你可以很好地傳遞可能在運行時失敗的字符串以轉換爲適當的價值。

就SQL注入攻擊而言,只要您不希望參數包含您隨後動態調用的SQL,就很安全。

0

不,不能保證某些運行時錯誤(認爲,'觸發'如果沒有別的)會熄滅。