編輯如果你打算回答這個問題,請至少閱讀它。不要簡單地閱讀標題,然後Google'sql注入php',並粘貼結果作爲答案str_replace的這種用法足以防止SQL注入攻擊嗎?
首先,我很清楚,有很多的資源可用於如何最好地防止SQL注入,但我的問題具體是關於如果很少的努力就足夠了。
最近我跟一家合同組織聯繫,他們之前承包商開發的合作伙伴(PHP)網站被發現存在重大安全問題(我個人最喜歡的是在URL中使用字符串'Emergency'未經身份驗證訪問網站中的任何頁面...)
我被要求檢查一個PHP站點的安全性並突出顯示所有主要問題。我知道從這個網站以前的經驗,編碼的標準是真的很糟糕(例如,大量的代碼重複跨越5%的網頁代碼,數百個未使用的變量,$ var =「是」代替布爾值,編寫的SQL語句插入每個腳本,默認情況下不安全(某些頁面忘記驗證用戶身份)等)。審查網站是一個痛苦的提醒,世界上有一些真正的蠢蛋稱自己是開發者。
由於這些代碼質量問題,我只想強調嚴重和半嚴重的安全問題。如果我注意到網站的每一個問題,我的審查將花費數週時間。
我不是SQL注入方面的專家,但我的理解是,您必須必須能夠在注入任何其他類型的語句之前關閉現有查詢的帶引號的字符串。那麼下面這行代碼是否足夠?
"'".str_replace("'","''",$_POST['var_name'])."'"
我沒有興趣在有關改善或更改代碼的建議,就是否有可能在這種情況下對通過$ _ POST [「VAR_NAME」] SQL注入。如果您不熟悉PHP str_replace
確實將第一個參數的所有實例替換爲第二個參數,而不僅僅是第一個實例。
任何輸入非常讚賞。
你可能想看看[這個答案](http://stackoverflow.com/questions/3115559/exploitable-php-functions/3697776# 3697776)@Rook – 2012-07-22 01:07:30
我個人認爲最簡單的就是使用PDO。這可能意味着對代碼做了一些更改,但我認爲這是「最小的努力」,因爲只要您使用準備好的語句,就可以保證**免受SQL注入的影響。 http://php.net/manual/en/book.pdo.php http://www.php.net/manual/en/pdo.prepare.php – Raekye 2012-07-22 01:20:57
湯姆,我愛你的問題,因爲它啓發了麥克麥金託什的答案,但對你的問題進行一些小調整將會闡明:假設代碼做了'''「.str_replace(array(」\\「,」'「),array(」\\\\「,」''「),$ _ POST [ 'var_name'])。「'」'(加倍反斜槓)? – 2013-04-29 22:29:37