2009-12-25 40 views
3

當我在我的網頁上使用我的Acunetix得到一個:盲SQL/XPath注入盲SQL注入

頭: GET /file.php?id=2'+and+31337-31337=0+-- + &頁= 2

響應:

沒有文件發現

(有時它顯示的結果)

這裏是我的PHP代碼:

$id = (int) htmlentities($_GET['id']); 
$fileid = mysql_real_escape_string($id); 

查詢:

SELECT * FROM `files` WHERE `id` = '".$fileid."' 

我做錯了什麼?有人可以用這個刪除我的數據庫嗎? 即時通訊也得到相同的消息,在某些查詢幾乎等於那一個,但也有限制0,1

我使用paginator(我固定一些注射,在那裏腳本),但例如我gaved它不是使用它

回答

2

在int上施放id應該已經可以防止任何SQL注入攻擊的可能性(據我所知)。

$id = (int) $_GET["id"]; 
$Query = "SELECT * FROM files WHERE id = $id;"; 

file.php?ID = ABCABC將導致的$ id = 0,所以在最壞的情況下,你不會找到匹配該ID的任何記錄,但$ ID將永遠不會包含任何字符串(特別是沒有SQL)因爲這個整數投。

我希望這就是你想知道的。

+0

他已經在使用'mysql_real_escape_string()',不需要這個。 – 2009-12-25 00:57:21

+0

但是對於我沒有施放任何東西並且只使用真正的逃脫+特徵的情況,我是否容易受到這些攻擊?我不能再現acunetix給我的任何注射。即使當我把'我沒有得到任何錯誤只是一個無效的ID – 2009-12-25 00:57:59

+0

我的意思是,如果你簡單地把它投在int上,你不需要htmlentities和mysql_real_escape_string,但在他的例子代碼中,他使用了所有這三個時間。當然,如果id可以是一個字符串,那麼mysql_real_escape_string是正確的選擇,否則(int)也可以解決這個問題。 – Akinzekeel 2009-12-25 13:06:14

2

我相信Acunetix真的是越野車,似乎並不存在任何SQL注入漏洞。

+0

hm我修復了他向我展示的一些xss攻擊,但即時通訊從盲數據庫接收了幾條消息,我真的很擔心 – 2009-12-25 01:03:56

+0

@PO:**爲了避免SQL注入**,您不需要**轉換變量**少得多使用**'htmlentities()'或'htmlspecialchars()'**,只要你使用'mysql_real_escape_string()'**你是安全的。爲了避免使用**'htmlspecialchars()'**的XSS **攻擊就足夠了。 – 2009-12-25 03:16:52