2011-11-01 76 views
0

我有一個在線的網站,我正在使用acunetix檢查我網站上的網頁漏洞。同時採用的Acunetix掃描這表明在URL盲目SQL注入高風險警報(我不是把代碼由於其長的長度)如何防止URL盲sql注入攻擊

如:URL顯示vuln

www.site.com/phpfile.php?1d=1 

我使用mysql_real_escape_string功能;此後也顯示出高風險警報。如何防止它...

,如果任何一個新的可以請你告訴我怎樣可以隱藏(使用.htacess了;在我的服務器.htacess不工作)?的ID = 1

例如:當用戶點擊查詢它應該顯示這個

www.site.com/phpfile.php 

,而不是

www.site.com/phpfile.php?1d=1 

請原諒我的英語和提前感謝您的幫助

+1

不要使用您接受的答案!它不會*保護你免受實際攻擊!惡意用戶可以輕鬆修改通過POST發送的內容! –

回答

3

你應該使用mysql_real_escape_string()轉義字符串,但是當預期的輸入是一個整數時它永遠不會有幫助(如果用戶輸入在查詢中沒有被引用,它實際上沒有什麼區別) - 你應該把它轉換爲整數代替,使用(int)intval()函數。

此外,我強烈建議您使用準備好的語句(例如PDO)或ORM層(例如Doctrine)。

+0

感謝您的信息,它是有益的 – Eka

+0

這裏唯一的理智的答案。儘管編輯了措辭。 –

-3

您可以使用POST請求,而不是GET

+0

謝謝你的信息samura – Eka

+0

OMG最無用的答案被接受。 –

+0

這是一個可怕的答案。 –

-2

容易隱藏?id=1如果你知道你的ID應該是一個數字,你可以使用:

if(is_numeric($_GET['id'])){ 
    $id = mysql_real_escape_string($_GET['id']); 
} 
else{ 
    ;///////display error 
} 
+1

什麼? mysql_real_escape_string在這裏是什麼? –

+2

'mysql_real_escape_string'在這裏完全沒用。它從字面上看並沒有什麼,因爲你已經完成了你應該做的事情,並且測試了一個數字值。 –

2

,如果任何一個新能你請告訴我怎樣才能隱藏?id = 1

這是絕對沒有意義的。
隱藏不會增加安全性。
查看用戶的配置文件應該使用GET方法完成,而不是POST。

我使用mysql_real_escape_string功能

此功能無關打針。它被稱爲不是「mysql_prevent_injection」,而是「mysql_real_escape_string」。所以,它僅用於格式化字符串。只能用於字符串。
如果你想把你的數據看作一個字符串,你必須把它放在引號中。所以,mysql會知道它是一個字符串。
人們總是一起使用這兩樣東西 - 引號和轉義。它們是沒有用的。

如果您不想將您的號碼視爲字符串,請將其格式化爲數字。

$id = intval($_GET['id']); 

你必須根據它的類型來格式化字符串的每一部分,而不是隨便使用一些函數。