asp 中 存在 sql 漏洞的原因,从原理上分析!~(看补充说明)

来源:百度知道 编辑:UC知道 时间:2024/09/21 08:19:32
我知道用 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的漏洞

原因有三:
一。写的程序不严格
二。操作系统和数