簡體   English   中英

何時使用 mysql_real_escape_string()

[英]When to use mysql_real_escape_string()

何時是使用 mysql_real_escape_string 的正確時間?

當我使用 isset(mysql_escape_string($_GET['param'])) 時,我應該使用它嗎?

當我使用 $foo = mysql_real_escape_string($_GET['bar']); 時我應該使用它嗎?

謝謝

在使用字符串文字構建 SQL 查詢時,您需要調用此 function。
你不應該在其他任何地方調用它。

調用這個 function 的目的是防止您像SELECT * FROM Students WHERE Name = 'Robert'); DROP TABLE Students;--' SELECT * FROM Students WHERE Name = 'Robert'); DROP TABLE Students;--' .
mysql_real_escape_string將轉義'字符,以便將惡意字符串完全視為字符串。

每當您不信任在 mysql 查詢中插入的數據時,都應該使用它來防止 sql 注入。 例如所有用戶 forms 數據。 在你的第一個例子中:不。 第二個示例:是的,如果您要在查詢中使用 $foo 變量。

每當您將數據插入數據庫查詢(POST/GET 數據)時,都應該使用它,但如果您只需要檢查數據,則不需要。

每當您從要在查詢中使用的用戶輸入時,您都可以使用 mysql_real_escape_string。

以下是如何使用它:

$user = mysql_real_escape_string('$_GET['user']);
$password = MD5($user.$_GET['password']);
$query = "SELECT * FROM users WHERE user = '$user' AND password = '$password' ";
//the quotes are vital  !!                 ^     ^  or you will not be safe!

這是不起作用的示例代碼:

在此處輸入圖像描述 破碼

$user = mysql_real_escape_string('$_GET['user']);
$password = MD5($user.$_GET['password']);
$query = "SELECT * FROM users WHERE user = $user AND password = '$password' ";

在示例中,我可以通過輸入任何密碼登錄到您的系統,並且
user or (1=1) -- 這將使查詢變為:

SELECT * FROM users WHERE user = user or (1=1) --  AND password = '$password

並且將批准所有登錄,因為密碼永遠不會被檢查。

使用 mysql_query 時,您一次只能執行一個 SQL 語句,因此:

$query = "SELECT * FROM a; DELETE FROM a WHERE (1=1)"
mysql_query($query);

會導致錯誤,因為不能是;之后的一部分 .

但是,此代碼將起作用:

危險

$query = "SELECT * FROM a; DELETE FROM a WHERE (1=1)"
mysqli_query($query);

因為改進后的 mysqli_query 確實允許在一個 go 中執行兩個或多個語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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