无双大蛇仙武:asp 中 存在 sql 漏洞的原因,从原理上分析!~(看补充说明)

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 05:07:01
我知道用 cint 和 过滤特殊字符的方法可以防止sql注入,我想知道存在sql注入的原因,不是要你们告诉我如何防止注入。
我对sql注入具体操作很熟悉,但是就是不知道为什么存在注入!~

首先,注入存在的原因不是SQL本身的漏洞,而是SQL语句的问题,因为SQL语句中存在引号和运算符这类功能符号,如果你对传递的参数不加过滤的话,非法用户就可以通过输入这类符号来判断你的数据库信息,严重的可以直接进入数据库中。

比如:

select * from logon where name='123' and pwd='123'

如果用户在name中输入 admin' or 1=1 这样这条语句就可以执行了。

这是简单的原理,具体的注入攻击比较复杂。防范的措施可以通过ASP过滤特殊字符,最好的方法是用存储过程。

举个例子来说吧(拿注册登陆的例子):
假设我们对用户的注册的名字和登陆时的名字都不做处理,并且程序不作多重判断。
那么登陆的时候 填入用户名: ' and 1=1 or '1'='1 密码为:1'or '1'='1
asp接收到后放在sql语句里。
strSql="select * from users where uname='" &uname &"' and pass='" &pass &"'"
把值传进来 语句就成了:
strSql="select * from users where uname='' and 1=1 or '1'='1' and pass='1' or '1'='1'"

把这个语句传给SQLSERVER,返回的就是所有的用户记录了。如果程序只判断 返回的记录是否大于0 ,那它登陆自然成功了!。
其他的比如网址参数的SQL注入等都是一个道理,就是利用SQL语句和程序的漏洞把非法的查询语句传给SQLSERVER。其实主要是利用了SQLSERVER的漏洞

原因有三:
一。写的程序不严格
二。操作系统和数据库管理系统不成熟
三。黑客太多,高手太强。你补的再好,也经不起一个人整天拿椎子,来窜你,总有一天会被他弄破的。所以没有好的方法,只能做做过滤嘴香烟,做做,封道。别的没什么好法子,
如今,经我研究发现,一个让你做出来的系统,固若鸡汤。别往网上放,呵呵!
开玩笑的。
好的方法就是,注意'='号,注意 sqlstr="select......"窜接写法,注意,http:中的iPaddress.地址寻控,注意,if or for方法来实现管理员和普通用户的区分,
别的不多说了,这是海陆空三防,你做到了,至少一版的小黑客不会再来搔扰你了.............

原因就是 SQL 语法中, 有些特殊的字符,具有特殊的意义, 如果在处理时,没有进行转义, 就会产生非预期的效果。

还有就是 SQL 的功能强大, 支持 嵌套, 多重之类的查询

例如: ' 和 --

例:SQL="select * from Tbl where UserName='"&requset("UserName")&"' and password='"&request("pass")&"'"

如果request("UserName")为(' and 'a'='a)括号里边的
这样的话就会产生大量的数据集,就可以越过这一层的审核