所谓SQL注入,其实是程序漏洞,没有什么技术,比如下面的语句就可能被注入
SQL="SELECT * FROM ADMIN WHERE USER='" &REQUEST("USER")& "' AND PASS ='" &REQUEST("PASS")& "'"
别人可以精心设计一个PASS参数提交给你,使得你的SQL完成其它功能,例如PASS的值为:
abc' OR USER='admin
这时候SQL语句是什么样子,你看看:
SELECT * FROM ADMIN WHERE USER='admin' AND PASS='abc' OR USER='admin'
任何密码都可以成功登录。
解决的方法:程序应该判断USER和PASS这些参数里面是否有引号等特殊符号。
上面是一个简单的例子,通过提交精心设计的参数,还可以修改你的数据库。
SQL 语句注入,防止的话:用存储过程或自己编写代码检测
sql注入是一种网络病毒,详细在百渡搜索
sql注入
可以理解为一种编程漏洞,
例如你做了一个登陆界面,后台有一个USER表,
你写了如下SQL语句,
SELECT USERNAME,PASS FROM USER WHERE USERNAME = '"+inputUser+"' AND PASS='"+inputPass+"'
其中,inputUser和inputPass是从你的界面取值,这样只能让不了解这个系统的用户按规则,添正确的值,
如:inputUser = 张三
inputPass=123
如果有人知道你要杳的是什么表,
inputPass的值如下,
inputPass= 123'; DELETE USER;
形式就是如上,只要你的拼出一个完整的字符串,就有可能执行恶意SQL
这就是SQL注入.
防止办法,使用预处理API执行SQL
Java preparedstatement
SQL变成如下形式
SELECT USERNAME,PASS FROM USER WHERE USERNAME = ? AND PASS= ?
preparedstatement.setObject(1,value);
preparedstatement.setObject(2,value);
preparedstatement.executeQuery();
.NET
SELECT USERNAME,PASS FROM USER WHERE USERNAME = :PARAM1 AND PASS= :PARAM1
以上就可以防止SQL注入