我在asp。
做一个网站当我用
开始搜索时这个名字就像这个o'neil
我收到了数据库错误。
我因为那个名字而得到这个错误。
如何在asp。
中删除此错误如果它在asp中我们可以使用addslashes和stripslashes但是我怎么能在asp ???
中这样做请帮忙
答案 0 :(得分:2)
无论是用于选择特定字符串值还是用于将其插入数据库,该字符串必须对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连接关联的帐户获得授权,将导致删除表中的所有行,并使应用程序崩溃!
通过系统地将单引号加倍,并使用一些其他预防措施(例如使用参数化查询),可以保护应用程序(及其数据库)免受此类攻击。