[英]mysql_real_escape_string() not sanitizing variable
我正在嘗試阻止SQL注入的現有網站。 在$_GET['ID']
未經過清理之前。
$ID=mysql_real_escape_string($_GET['ID']);
$sQuery=mysql_query("select * from tbl_mini_website as s1, tbl_actor_merchant as me where s1.MERCHANT_ID=$ID AND s1.MERCHANT_ID=me.MERCHANT_ID");
如果我在url的末尾添加一個' mysql_real_escape_string()
我從mysql_error()
得到這個:
您的SQL語法有錯誤; 查看與您的MySQL服務器版本對應的手冊,以便在第1行的'\\\\'和s1.MERCHANT_ID = me.MERCHANT_ID'附近使用正確的語法
沒有mysql_real_escape_string()
我得到:
您的SQL語法有錯誤; 查看與您的MySQL服務器版本對應的手冊,以便在第1行的'\\'和s1.MERCHANT_ID = me.MERCHANT_ID'附近使用正確的語法
我不確定它是什么? 任何幫助將不勝感激。
mysql_real_escape_string轉義,但不引用。
嘗試:
$sQuery=mysql_query("select * from tbl_mini_website as s1, tbl_actor_merchant as me where s1.MERCHANT_ID='$ID' AND s1.MERCHANT_ID=me.MERCHANT_ID");
更一般地說,我傾向於將這兩個包裝在一個函數中,例如:
function quoteValue($value) {
return "'" . mysql_real_escape_string($value) . "'";
}
這很有用,因為您可能會發現需要更精確的引用行為的行(特別是在處理Unicode,控制字符等時)
這是因為你沒有引用變量。
這是您給出以下輸入的查詢
$_GET['ID'] = "1";
$ID=mysql_real_escape_string($_GET['ID']);
SELECT ... where s1.MERCHANT_ID=1 ...
$_GET['ID'] = "1'"
$ID=mysql_real_escape_string($_GET['ID']);
SELECT ... where s1.MERCHANT_ID=1\' ...
$_GET['ID'] = "1'"
SELECT ... where s1.MERCHANT_ID=1' ...
Phil Brown是對的,但你要忘記老式的mysql_real_escape_string or mysql_connect()
因為它們已經很老了,轉移到php的PDO(),在那里你可以使用預備語句,綁定,獲取任何更多功能的對象。
如果你想要下一代dabatase操作和SQL Injection的安全性,我建議你在http://php.net/manual/en/book.pdo.php閱讀PDO文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.