[英]Sql injection mysql_real_escape_string
我有一個難題\\n, \\r, \\x00
當有人在注釋字段上使用" '
或<br>
時\\n, \\r, \\x00
如何將變量mysql_real_escape_string()
插入數據庫\\n, \\r, \\x00
,我嘗試使用preg_replace
而不是mysql_real_escape_string
,但是我不確切地知道如何允許所有想要的字符和符號。
mysql_real_escape_string
僅轉義值,以使查詢不會中斷,如果使用正確,它也可以防止SQL注入。
如果您不希望某些字符,則在應用mysql_real_escape_string
之前,需要使用其他功能來去除它們。
[插入強制性的“使用准備好的語句”注釋]
例如:
$string = "My name is
John";
$filtered_string = str_replace("\n", " ", $string); // filter
$escaped = mysql_real_escape_string($filtered_string); // sql escape
mysql_query("INSERT INTO `messages` SET `message` = '" . $escaped . "'");
您應該可以使用str_replace來解決此問題:
mysql_real_escape_string(str_replace(array("\n", "\r\n", "\x00", '"', '\''), '', $input));
話雖如此,切換到mysqli或PDO進行數據庫讀/寫是一個好主意。 這兩個都允許使用准備好的語句,從而降低了SQL注入的風險。
這是PDO的示例:
$stmt = $PDOConnection->prepare('INSERT INTO example_table (input_field) VALUES (:input_field)');
$stmt->bindParam(':input_field', $input);
$stmt->execute();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.