簡體   English   中英

SQL注入mysql_real_escape_string

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM