可能重複:
Best way to prevent SQL Injection in PHP何時使用mysqli_real_escape_string?
我想知道有關SQL注入,想知道何時使用mysqli_real_escape_string。
每次我在查詢中有WHERE子句時,是否需要使用它?
可能重複:
Best way to prevent SQL Injection in PHP何時使用mysqli_real_escape_string?
我想知道有關SQL注入,想知道何時使用mysqli_real_escape_string。
每次我在查詢中有WHERE子句時,是否需要使用它?
對於來自用戶或不能被信任的任何數據,您應該使用mysqli_real_escape_string。
如果在查詢 中包含$ _REQUEST「vars」,則必須使用它。
$query = "UPDATE foo set bar = '{$_GET['var']}' ..."
$query = "INSERT INTO foo ('{$_POST['var']}',) ..."
$query = "SELECT bla from foo WHERE bar = '{$_COOKIE['var']}'"
每本querys必須mysqli_real_escape_string提供打針......
你的意思是我必須使用mysqli_real_escape_string,即使在更新語句的值如下:'$ query =「UPDATE foo set bar = mysqli_real_escape_string($ _ GET ['var']) ...「,也在WHERE子句中,例如:'$ query =」從foo中選擇bla WHERE bar = mysqli_real_escape_string($ _ COOKIE ['var'])「'? – jaypabs 2012-07-26 01:27:03
您使用mysqli_real_escape_string
或它的任何變化,以確保數據形成任何用戶輸入字段正確轉義。
例如,您的表單只有幾個輸入。您點擊提交,數據將作爲請求發送到您的PHP腳本。在腳本中,您可以將用戶發佈的值插入到數據庫中。
如果用戶鍵入以下內容輸入域用戶登錄,例如:
' WHERE `username` = {x} AND password > 1;
有潛力讓該人都從你正在使用的表中的數據。使用:
mysqli_real_escape_string($input)
將產生上述爲:
\' WHERE `username` = {x} AND password > 1;
上的逃逸字符串'將停止工作可能的SQL注入攻擊。
也就是說,沒有理由應該使用mysqli_real_escape_string()
作爲PDO和綁定參數在偏轉大量不同的SQL攻擊/注入方法方面要優越得多。學習並使用它!
編輯,由於評價
%
和_
也需要超越mysqli_real_escape_string()
function escape_extra_chars ($string)
{
$string = preg_replace("/\%/", "\%", $string);
$string = preg_replace("/\_/", "\_", $string);
return $string;
}
除了反正那些線(即FUNC是未經測試)
嗨,我實際上使用我的另一個腳本準備好的聲明,但因爲我已經將大部分腳本從mysql移植到mysqli我有很多使用傳統編程的sql語句。所以不是使用準備好的語句,而是決定使用mysqli_query而不是修改我的所有代碼來使用準備好的語句。所以在此期間使用如下代碼是安全的:'mysqli_real_escape_string($ _ POST ['username'])'? – jaypabs 2012-07-26 01:20:30
@jaypabs是的,你可以像這樣使用它,它將提供一個安全級別,但它不會轉義包含特殊字符的字符串:在LIKE子句中使用'%'和'_'。由於它們通常包含在查詢中的雙引號內,所以它們仍然是風險的。 (請參閱我的答案中的推薦信息) – 2012-07-26 08:35:24
這是否意味着我們確實需要使用準備好的語句?發生了什麼'mysqli_query'? 'mysqli_query'已經沒用了嗎? – jaypabs 2012-07-26 08:38:11
你需要轉義特殊待遇SQL查詢中可能包含有害字符的所有參數。用戶輸入尤其如此。 – nickb 2012-07-25 15:23:58
你應該幾乎總是使用綁定參數,而不是mysqli_real_escape_string – Quentin 2012-07-25 15:24:18