2012-03-12 95 views
9

我爲一位客戶開發了一個網站,他們將在網上發佈他們的商品圖片。網址是www.domiainname.com/item-details.cfm?sku=125。有人試圖瀏覽到產生的www.domiainname.com/item-details.cfm?sku=125%20and%203=3以及我收到通知的錯誤。這是一個SQL注入攻擊的例子嗎?

我也收到錯誤報告:

[email protected]@version-- 
item-details.cfm?sku=1291'[email protected]@version 
[email protected]@version 

最後三個例子肯定是有人試圖進入系統,正確的?

如果我們將這個轉換爲存儲過程,是否會減少或消除插入攻擊的風險?

+1

是的,查詢被包裹在cfqueryparam標籤(例如'' – HPWD 2012-03-12 13:41:02

+0

我明白他們想用@@版本做什麼,但是3 = 3會告訴他們什麼?我的錯誤捕獲器也會報告IP地址。我想過要添加一個db表格和添加的IP,我從這樣的情況中獲得,然後將這些用戶重新發布到谷歌或其他東西。這是有效的還是隻是一個練習? – HPWD 2012-03-12 13:43:38

+1

通過添加重言式(例如3 = 3),他們試圖從數據庫中獲取所有結果。但是,也許他們不像所有那樣聰明,因爲他們需要在這種情況下使用OR而不是AND!只要你使用''''''''''''''''''''''''''''''''''''''''''您應該可以安全地使用SQL注入攻擊(至少在SELECT上,您可能仍然容易受到對INSERT和UPDATE的XSS攻擊)。儘管如此,驗證你的參數是一個好主意,所以你可以在錯誤發生之前捕獲錯誤 - 嘗試執行''來捕獲這個錯誤,或者使用'isNumeric()得到通知。 – 2012-03-12 13:53:15

回答

8

是的,看起來有人是惡意的。使用cfqueryparam將防止SQL注入攻擊。有疑問時(和它的CF),問奔:

SQL Injection Attacks, Easy To Prevent, But Apparently Still Ignored

實施例:

<cfquery ...> 
    SELECT * 
    FROM  Products 
    WHERE  SKU=<cfqueryparam value="#URL.SKU#" cfsqltype="CF_SQL_INTEGER"> 
</cfquery> 
+1

標記爲正確,因爲它是最徹底的答案(例如,示例用法,指向Ben博客的鏈接和livedocs)。另外兩個答案在技術上也是正確的。 – HPWD 2012-03-12 14:08:16

2

使用cfqueryparam,而忘記了任何SQL注入;)

+0

錯別字*忘記 – 2012-03-13 22:52:24

0

是的,有人試圖SQL注入。如果您在代碼中正確檢查sku變量,這不會造成任何傷害。