如何防止sql注入在php中,但仍顯示「和」?一個我使用如何防止sql注入但保留「和」?
$input = strip_tags($input);
$input = htmlentities($input);
但是輸出\當下」和\」。反正我有可以顯示「和」沒有斜線,但保留他們那裏,所以我沒有得到注入?
如何防止sql注入在php中,但仍顯示「和」?一個我使用如何防止sql注入但保留「和」?
$input = strip_tags($input);
$input = htmlentities($input);
但是輸出\當下」和\」。反正我有可以顯示「和」沒有斜線,但保留他們那裏,所以我沒有得到注入?
首先,該代碼不是反斜槓,當然它們仍然存在。使用stripslashes()去掉反斜槓,但不要這樣做。 如果你在數據庫中看到了這些斜槓,並且你已經使用了mysql_real_escape_string,那麼你可能已經開啓了magic_quotes_gpc,並且你正在添加另一組slahses。首先刪除那些自動添加的,然後應用mysql_real_escape_string,它們不會以這種方式顯示,但仍然會在那裏,並在查詢您的數據庫時安全使用。
告訴你的方法是不是防止SQL注入之有道!
請始終使用您正在使用的數據庫庫提供的衛生方法,例如mysql_real_escape_string()
如果你使用標準的mysql庫。衛生方法不會改變最終結果中的任何字符。
或者,使用PDO或mysqli中的準備語句 - 如果您正確綁定傳入數據,那麼會自動輸入衛生設施。
對於不小心,沒有什麼神奇的解決方案。
單獨的這些斜槓不防止SQL注入。它們的存在表明了另一個問題,magic_quotes。魔術引號是PHP2中的一個便利功能,從來沒有作爲安全功能。 (順便說一下,當數據庫不支持多字節字符時,他們在1997年左右就安全了)。
無論如何,禁用magic_quotes。使用手動轉義(mysql_real_escape_string)或者更好的方式使用PDO更方便的準備語句。
如果你想懶惰,仍然禁用magic_quotes。但是使用$_GET = array_map("mysql_real_escape_string", $_GET);
並且在腳本開始和數據庫連接建立之後對$ _POST和$ _REQUEST執行相同的操作。
然後將htmlentities(stripslashes($input))
用於寫入輸出以除去多餘的反斜槓。
在執行數據庫命令之前用''(兩次單引號)替換' – 2011-02-06 15:38:10