SQL 注入露洞相关知识整理
来源:互联网 发布:js事件驱动 编辑:程序博客网 时间:2024/04/25 08:53
上上个星期,有人反馈,CSDN有SQL注入露洞,汗颜,几年前为SQL注入露洞,部门专门对所有代码做过一次非常大的检查,竟然那次检查还有遗漏的地方。最近这几个星期,就是一直再对代码做再次复查,看有没有SQL注入露洞。
存在SQL注入露洞,就因为你的SQL语句是自己拼凑的,在拼凑的时候,没有考虑用户可能拼凑进有问题的语句造成的。
之前我们采去的避免措施是,对接受的参数的校验进行封装,所有参数的获得,都必须通过这个封装的函数来获得。但是实际开发中,总有些地方,有些代码没有调用这个封装的函数来进行校验。
上周末,公司内部讨论会的时候,决定换种思路。从避免自己拼凑SQL语句的方式来实现,具体就是开发规范中有一条,不允许用拼凑的SQL语句,要传参数,就用SqlParameter。比如下面的代码是不允许的。
string strSQL = "select UserID,UserName,Email from User where UserName = '"+aa.replace("'","''")+"'";
SqlDataReader sdr = SqlHelper.ExecuteReader(strConnStr,CommandType.Text,strSQL)
而下面的代码是允许的:
SqlParameter[] parm1 = new SqlParameter[]{
new SqlParameter("@UserName",SqlDbType.NVarChar,50)
};
parm1[0].Value = strUserName;
string strSQL = "select UserID,UserName,Email from user where UserName = @UserName ";
SqlDataReader sdr = SqlHelper.ExecuteReader(strConnStr,CommandType.Text,strSQL,parm1)
原因:SqlParameter 会自动处理参数的校验,就类似使用存储过程是不会出现SQL注入露洞的问题一样。
一些SQL注入有关的知识点:
如何SQL注入:
http://www.54nb.com/Read.Asp?ID=1451672&Type=71
SQL注入中有用的几个SQL语句
[N] = 第N個表
ID=1 and (Select top 1 name from(Select top [N] id,name from sysobjects where xtype=char(85)) T order by id desc)>1
[T] = 表名
[N] = 第N個字段
ID=1 and (Select Top 1 col_name(object_id('[T]'),[N]) from sysobjects)>1
SQL注入表名和字段名的获得
- SQL 注入露洞相关知识整理
- SQL防注入功能原理相关知识
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入语句相关的命令整理
- 最详细的SQL注入相关的命令整理
- 转:最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- 最详细的SQL注入相关的命令整理
- SQlite3 概论
- CSDN博客上的文章人气不是很足啊!
- Spring MVC framework 执行过程
- IT精英,必须掌握的命令行
- c/c++ 处理整数的进制
- SQL 注入露洞相关知识整理
- paypal 注意事项
- 印度生产配置再次出错
- spring mvc 实现原理
- 一生的五句话
- C语言/C++中怎样产生随机数
- 今天你进步了吗?
- 李开复给中国学生的第六封信:选择的智慧
- Apache Rewrite 规则详解