2010-03-30 35 views
0

如果我不小心加倍逃離一個字符串,數據庫會受到傷害嗎?雙重逃逸是否可能對DB造成傷害?

對於這個問題的目的,讓我沒有使用存儲過程或參數化查詢

例如說,假設我得到以下輸入:

bob's bike

我逃脫即:

bob\'s bike

但我的代碼是可怕的,並再次逃脫它:

現在
bob\\\'s bike

,如果我插入到數據庫中,在DB的值將是

bob\'s bike

這雖然不是我想要的東西,不會傷害DB。假設我採取了所有其他必要的安全預防措施,是否有可能雙重逃脫對數據庫執行某種惡意操作?

回答

1

在安全性方面,單次逃脫同樣有害/無害,因爲雙重逃逸。

最大的問題是,你需要雙unescape。否則,如果你只有single-unescape,你最終會在數據庫輸出中出現反斜槓。

例如,如果通過unescape()函數運行bob\\\'s bike,它將輸出bob\'s bike,然後將打印到頁面,除非您再次忽略它。但是不要多次嘲笑,因爲這可以消除有意的反斜槓(並且可能造成更多傷害)。

這個問題與PHP的魔術引號功能有什麼關係嗎?只是好奇...

1

假設我採取其他一切 必要的安全防範措施

硬編碼SQL和/或參數值到應用程序不應該被認爲是「採取必要的安全防範措施」,因爲你永遠是主題到SQL注入攻擊(在Web應用程序的情況下)。

如果可以,最好使用存儲過程,如果這不是一個選項,至少應該使用參數化查詢(綁定變量是另一個術語)。

但是要回答你的問題,在數據庫中存儲bob\'s bike本身並不會造成任何傷害,但要小心考慮上面提到的其他問題,從安全角度來看,它們非常重要。