2011-03-29 55 views
1

我如何使這個查詢SQL注入證明?我如何使這個查詢sql注入證明?

$sql=mysql_query("SELECT * FROM updates ORDER BY item_id DESC LIMIT 16"); 
while($row=mysql_fetch_array($sql)) 
{ 
$msg_id=$row['item_id']; 
$message=$row['item_content']; 
} 

,或者可以有人告訴我一些例子,或者給我一個鏈接到一個教程 我很新的這一點,如果有人可以幫助我,這將是巨大的! :)

+1

ummm沒有什麼能夠將'注入'到查詢中.. – Neal 2011-03-29 18:07:13

回答

7

該查詢已經是 「SQL注入證明」。當你把一個外部的字符串,並將其連接爲您的查詢,而無需使用綁定變量,逃避或適當的消毒

SQL注入攻擊發生。

例如,如果您的查詢是這樣的:

$sql=mysql_query("SELECT * FROM updates where order_ref = '$order_ref' ORDER BY item_id DESC LIMIT 16"); 

那麼你將有一個問題,如果變量$order_ref可以通過環境(一個HTTP查詢參數,命令行參數的影響,基本上任何可以受到用戶的影響)。如果有人可以將值傳遞到您的應用程序中,如「'; delete from updates;」,那麼您將遇到問題。我在上面的例子中

一個解決辦法是先逃避$order_ref這樣的價值觀:

$safe_order_ref = mysql_real_escape_string($order_ref); 
$sql=mysql_query("SELECT * FROM updates where order_ref = '$safe_order_ref' ORDER BY item_id DESC LIMIT 16"); 
1

它已經是因爲你不使用任何用戶輸入來構建它。

0

注射證明。當您從多個字符串(其中一些來自用戶)在$ _GET或$ _POST或$ _COOKIE集合中構造SQL時,會發生注入。你的是靜態的 - 沒有注入的地方。

+0

從用戶或*(這是許多人忘記的東西)*來自任何可能的不可信來源*(以及可信來源shouldn' T爲信任之一:它可以承受一些失敗,被黑客入侵,...)* – 2011-03-29 18:08:52

+0

@Pascal丁:如果可信源已被劫持,SQL注入是你最擔心的。 – 2011-03-29 18:13:14

+0

並非總是如此:在某些情況下,如果你插入到你的數據庫中的數據是不是你想要的,它不一定是一個catastrophy - 只要它不破壞你的數據庫或應用程序。 – 2011-03-29 18:16:33

0

我的男人。你只是從你的數據庫中提取數據。當用戶通過表單或GET變量提供輸入(GET不推薦)時,會在查詢本身中使用SQL注入。

比方說你有一個表單職位的人的名字。

你的SQL會是什麼樣子:

$query='SELECT * FROM people WHERE name='.$_POST['name']; 

你會需要清潔貼用mysql_real_escape_string()或一些其他的SQL清洗功能,用戶的數據。

另一件事:什麼是SQL注入的證明。似乎總有一種有趣的小方法可以利用。你想要做的就是讓這麼耗時的人放棄。

繼續保持對兄弟。

+0

不,我很確定他的原始查詢實際上是SQL注入證明 – 2011-03-29 18:15:51

+0

Ha。真正。你有我的先生。 – 2011-03-29 18:24:30

0

SQL注入是代碼注入 技術,它利用一個應用程序的數據庫 層發生的安全 漏洞。所述 漏洞是當存在時用戶 輸入要麼不正確地過濾 嵌入式SQL語句中或用戶輸入 字符串文字轉義字符 不是強類型和 從而意外地執行。這是 一個更一般的類的 漏洞的實例,可能出現 每當一個編程或腳本語言 嵌入內的另一個。 SQL注入攻擊也被稱爲 作爲SQL插入攻擊。

詳情請參閱HERE。閱讀完這篇文章後,您應該知道爲什麼每個人都說,您的查詢已經是SQL注入證明。