SQL注入--代码层注入

所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.

根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。

这篇文章只是为了能够更清楚的了解SQL注入,并且提出一些解决方法,但是没有详细的过程。

一般在网站开发过程中,以下三点要特别注意

1.表单的输入
2.URL的参数
3.请使用AJAX的童鞋,要绝对注意了,这是最容易忽视的地方,传递参数的时候别留下漏洞了。

例子1:
若有一段代码设计如下:
SELECT * FROM SystemUsers WHERE name = '" + userName + "'; 
将userName赋值为a' or 't'='t
此时原始语句发生了变化:
SELECT * FROM SystemUsers WHERE name = 'a' OR 't'='t';
那么将会查询出SystemUsers的所有记录 ,想想都觉得可怕吧。

例子2:
若有一段代码设计如下:
SELECT * FROM userTable WHERE name = " + userName + "; 
将userName赋值为1; DROP TABLE users;
此时原始语句发生了变化:
SELECT * FROM userTable WHERE name =1; DROP TABLE 系统表;
后果可想而知,奋斗几十年,一朝回到解放前!!!

例子3:
若有一段代码设计如下:
select * from [User] where userName = '" + NameTxt + "'and userPassword = '" + PwdTxt + "'"; 
将NameTxt赋值your'--          //--为SQL中的注释语句
那么语句变成select * from [User] where userName = 'your'  --'and userPassword =**';
那么你的平台只要知道用户名,任何人都可以访问啦!

如何防止:
1.参数化输入,一定要养成参数化输入的习惯,尽量摒弃以上的代码习惯。
2.对特殊字符进行过滤,如-- 、;  、'' 等等。
3.限制字符串的长度。
4.利用正则表达式进行判断。

posted @ 2013-07-12 14:20  Seven Pounds  阅读(956)  评论(0编辑  收藏  举报