后台不能用这个放通用型的防注入的代码的
后台自己对自己的文本需另外写或在原来的基础上,修改
------------
其实这个通用的一点都不好用的
你不如参考一下其他的代码,都有防注入的,只对需要注入的地方做了检测就足够了,
另外sql 注入还有一个非常大的问题,就是通用的上传组件,这个才是最大的漏洞,你必须要改里面的东西,例如路径,名称,等等,都则被别人拿个专门针对上传的黑客工具一下就黑掉了
SQL注入漏洞一般是通过程序将特殊字符去掉的,基本方法如下:
在将字符串传入SQL语句之前先通过一个函数进行检测,如果其中包含了and、or、update、delete等信息,则报错。
在数据库的命名规则中要进行一些前缀处理,不要用通常的命名规则去命名表和字段,比如用户表,不用users或者tbusers,而是采取esc_tbusers,这样在一定程度上也能防止SQL注入的问题。
把下面的代码加入你需要数据库调用的页面。或者某个公共文件。
<%
ResponseBuffer = True '缓存页面
'防范get注入
If RequestQueryString <> "" Then StopInjection(RequestQueryString)
'防范post注入
If RequestForm <> "" Then StopInjection(RequestForm)
'防范cookies注入
If RequestCookies <> "" Then StopInjection(RequestCookies)
'正则子函数
Function StopInjection(Values)
Dim regEx
Set regEx = New RegExp
regExIgnoreCase = True
regExGlobal = True
regExPattern = "'|;|#|([\s\b+()]+([email=select%7Cupdate%7Cinsert%7Cdelete%7Cdeclare%7C@%7Cexec%7Cdbcc%7Calter%7Cdrop%7Ccreate%7Cbackup%7Cif%7Celse%7Cend%7Cand%7Cor%7Cadd%7Cset%7Copen%7Cclose%7Cuse%7Cbegin%7Cretun%7Cas%7Cgo%7Cexists)[/s/b]select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b[/email]+])"
Dim sItem, sValue
For Each sItem In Values
sValue = Values(sItem)
If regExTest(sValue) Then
ermessage"<Script Language=javascript>alert('非法注入!你的行为已被记录!!');historyback(-1);</Script>"
ResponseEnd
End If
Next
Set regEx = Nothing
End function
%>
<%
Function ermessage(content)
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 10 Transitional//EN" ">
譬如你有一条SQL查询是
SELECT FROM tab WHERE username = AND password = 目的是要验证用户名和密码都正确,假设zhangsan为合法用户,但是我不知道密码
我如果要注入,只需要令username = 'user ''or 1 = 1',密码我随意给
这样,注入后的SQL就变成为
SELECT FROM tab WHERE usename = 'zhangsan' OR 1 = 1 and password = 'xxx'
看到没?你后面的密码验证没用了
也可以令username = 'zhangsan''--'
--在sql里面是注释用的,所以sql变为
select from tab where username ='zhangsan' -- and password = 'xxx'
跳过你的密码验证了哦。。
StopInjection 是一个自定义的函数~
你自己仔细看看: Function StopInjection(Values) 这一行不就是定义了这个函数吗
就算每行都给你加上注释~你现在的技术基本也无法理解~~开始先从基础的练习练习吧~~
还有: 正则表达式不止过滤特殊字符~还有其他的
比如SQL关键字 之类的~自己先学学吧~
theid=requestQueryString("id")
sql="update content set click=click+1 where id="&theid&""
sql_2="select from content where id="&theid&""
传递的参数为theid, 主要的两个sql为 sql, sql_2
我们假设传递参数 id=10
sql : update content set click=click+1 where id= 10
sql_2: select from content where id= 10
这个正常哈
我们再假设传递 id=aaa
sql : update content set click=click+1 where id= aaa
sql_2: select from content where id= aaa
这个时候执行SQL会提示找不到字段aaa, 出错
再来输入普通的SQL注入字符串
id=1%20or%201=1 即 id=1 or 1=1
这个时候SQL变成
sql : update content set click=click+1 where id=1 or 1=1
sql_2: select from content where id=1 or 1=1
这样子的话, 由于条件里面有or 1 = 1 所以不管结果如何, 所有记录都为true, 这个就必然导致查询或者更新所有记录, 这个就是简单的SQL注入, 有这一个前提, 可以利用这个漏洞执行任何的SQL
-----------------------------------------------------
解决方法:
对于字符串, 简单的方法是过滤掉其中的单引号
对于数值型, 最好经过处理, 不符合的参数直接置0或者其他非可用数值
例如, 我们在这里将 theid 处理一下
If theid = "" Or IsNumeric(theid) Then theid = 0 'theid不是数值或者为空, 则将theid置0
theid = CInt(theid) '这里处理一下 因为如果传递 12e2 这个用IsNumeric函数也是true(科学计数法 = 12 10^2 = 1200), 如果直接传递给sql会出错, 所以用 CInt直接将其转换成 数值1200
这样的话再来看以上的三种参数传递结果
1:
sql : update content set click=click+1 where id= 10
sql_2: select from content where id= 10
这个还是照常执行, 没问题
2: 传递 id=aaa 这个时候theid不是数字, 则直接将theid置0
sql : update content set click=click+1 where id= 0
sql_2: select from content where id= 0
这样可能找不到记录, 但是不会出现错误
3: 传递 id=1 or 1=1 这个时候theid也是字符串, 将theid置0, 同2
这样就关闭了注入通道了 :)
自己慢慢理解哈 :)
在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:
⑴ 某个ASPNET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。
⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASPNET应用构造查询的一个例子:
SystemTextStringBuilder query = new SystemTextStringBuilder(
"SELECT from Users WHERE login = '")
Append(txtLoginText)Append("' AND password='")
Append(txtPasswordText)Append("'");
⑶ 攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。
⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASPNET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。
⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。
⑹ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。
如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。
系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。
以上就是关于ASP SQL注入问题,高分求助全部的内容,包括:ASP SQL注入问题,高分求助、asp 网站发现有注入漏洞 and 1=2 报错。 请问如何在 asp 的数据库里面过滤这些字符。、acc数据库的asp程序怎么防注入啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)