即使使用mysql_real_escape_string()函數(shù),是否存在SQL注入的可能性?考慮這個示例情況。SQL是用PHP構(gòu)造的,如下所示:$login = mysql_real_escape_string(GetFromPost('login'));$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";我聽過很多人對我說,像這樣的代碼仍然很危險,即使使用了mysql_real_escape_string()函數(shù)也可以破解。但我想不出任何可能的漏洞?像這樣的經(jīng)典注射:aaa' OR 1=1 --不工作。你知道任何可能通過上面的PHP代碼注入的注入嗎?
3 回答

有只小跳蛙
TA貢獻1824條經(jīng)驗 獲得超8個贊
請考慮以下查詢:
$iId = mysql_real_escape_string("1 OR 1=1"); $sSql = "SELECT * FROM table WHERE id = $iId";
mysql_real_escape_string()
不會保護你免受這種傷害。 您在查詢中的變量周圍使用單引號(' '
)的事實可以保護您免受此攻擊。以下是一個選項:
$iId = (int)"1 OR 1=1";$sSql = "SELECT * FROM table WHERE id = $iId";

躍然一笑
TA貢獻1826條經(jīng)驗 獲得超6個贊
嗯,除了%
通配符之外,除了通配符外,沒有什么可以通過它。如果您使用LIKE
聲明可能會很危險,%
因為如果您不對此進行過濾,則攻擊者可以將登錄作為登錄,并且必須強制使用您的任何用戶的密碼。人們經(jīng)常建議使用預(yù)準(zhǔn)備語句使其100%安全,因為數(shù)據(jù)不會以這種方式干擾查詢本身。但是對于這樣簡單的查詢,做類似的事情可能會更有效率$login = preg_replace('/[^a-zA-Z0-9_]/', '', $login);
添加回答
舉報
0/150
提交
取消