我是PHP新手。需要轉義多少個字符?
我用兩種方式來逃避字符串:
方法1.使用替代
function htmlreplace($str, $useBR = false) {
$str2 = $str;
$str2 = preg_replace ("/</", "<", $str2);
$str2 = preg_replace ("/>/", ">", $str2);
$str2 = preg_replace ("/(\r\n|\n|\r)/", $useBR ? "<br />" : " ", $str2);
$str2 = preg_replace ("/&/", "&", $str2);
$str2 = preg_replace ("/\'/", "'", $str2);
return preg_replace ("/\"/", """, $str2);
}
$string='some string needs to insert into mysql';
stripslashes(htmlreplace($string));
方法2.連接到MySQL
function sanitizeString($var, $DBconnection) {
$var = strip_tags ($var);
$var = htmlentities ($var);
$var = stripslashes ($var);
return $DBconnection->real_escape_string ($var);
}
$string='some string needs to insert into mysql';
trim (sanitizeString ($string));
從 SQL Injection Prevention Cheat Sheet
後顯示這些角色需要轉義
NUL, BS, TAB, LF, CR, SUB, %, 」, \, _, 所有其它非字母數字字符與ASCII值小於256
顯示addslashes()函數將轉義這些字符:單引號('),雙引號(「),反斜槓()和NUL(NULL字節)
據我所知,轉義是爲了防止SQL注入。
所以我很好奇有多少角色需要逃脫?他們是什麼?他們都是Special Characters in HTML?
至於SQL注入阻止,感謝Slico,Marc B和bub幫助。
謝謝!
你爲什麼不只是使用PDO預處理語句?在SO上有一個[nice post](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1)關於SQL注入 –
不,你不用't「黑名單」字符。如果發生任何變化,您的列表將會過時並允許出現問題。這正是** WRONG **防止sql注入的方法。您不應該首先通過正確使用工具來實現它:使用佔位符準備語句。那麼你不必擔心所有可能會有什麼惡意的東西,並讓數據庫本身爲你擔憂。 –
無論如何,對於SQL注入來說,HTML確實沒有多大的作用。 –