搜索中的数据库错误

时间:2010-03-03 05:57:40

标签: search asp-classic ado

我在asp。

做一个网站

当我用

开始搜索时

这个名字就像这个o'neil

我收到了数据库错误。

我因为那个名字而得到这个错误。

如何在asp。

中删除此错误

如果它在asp中我们可以使用addslashes和stripslashes但是我怎么能在asp ???

中这样做

请帮忙

1 个答案:

答案 0 :(得分:2)

无论是用于选择特定字符串值还是用于将其插入数据库,该字符串必须对SQL有效,特别是:

  • 字符串的开头标有单引号字符
  • 作为字符串一部分的任何单引号必须加倍(以免SQL将其理解为字符串的结尾)
  • 字符串的结尾标有单引号。

因此

  'O''Neil'

是“编码”奥尼尔这个名字的正确方法,因为如果我们使用

  'O'Neil'

相反,SQL会将此视为一个字符串,以字母O开头,但在此之后结束。然后,这个单字母字符串后跟SQL无法理解的表达式Neil'


以上信息将允许您存储名称并以一种方式查询它们,这样可以保留名称中嵌入的单引号,与Irish O'xxxx一样。
除了帮助你解决这个问题,如果我忘记提及SQL injection的风险,我会失职。

现在您已了解非加倍的单引号将终止该字符串,您可以看到恶意用户如何使用它来“欺骗”该应用程序。
例如,假设用户以某种方式猜测正在使用的表是search,他/她可以继续并在应用程序的编辑框中填写以下字符串

  O'; DELETE FROM search where 'a%'='a

您的逻辑将使用此字符串,如下所示

Lstart="O'; DELETE FROM search where 'a%'='a"; select * from search where lname like '%Lstart%'
-- which effectively will be substituted as
select * from search where lname like '%O';  DELETE FROM search where 'a%'='a%'

如果与基础SQL连接关联的帐户获得授权,将导致删除表中的所有行,并使应用程序崩溃!

通过系统地将单引号加倍,并使用一些其他预防措施(例如使用参数化查询),可以保护应用程序(及其数据库)免受此类攻击。