2012-03-12 91 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变量,这不会造成任何伤害。