有关sql注入
[
2008-1-30 10:14:28
| 作者: 一线风
| 阅读:1204
| 评论:0
| 天气:
| 心情: normal
]
| 心情: normal
]
大家存在5点误区:
1、sql注入比较难防,需要替换select,delete等一打字符
2、忽略DropDownList传来的东西
3、access比sqlserver不安全
4、网站没有显示出错信息就说明网站是安全的
5、忽略post提交的信息
大家存在5点误区:
1、sql注入比较难防,需要替换select,delete等一打字符
其实对于字符型替换再多都没有替换单引号为两个单引号来的好!对于数字型替换再多都没有用,一定要类型转换。
2、忽略DropDownList传来的东西
其实是不对的,一切客户端的东西都是不可信任的(IP都有可能),select下拉框也是!因为可以自己做一个htm提交到服务器。
3、access比sqlserver不安全
安全不安全关键看怎么用,如果sqlserver还是像access一样用,一个sa帐户的话,很明显,sqlserver比access不安全,可以直接得到表名和字段名!access反而倒安全点了,因为只能通过逐位猜解得到。
4、网站没有显示出错信息就说明网站是安全的
当有记录的时候显示记录,没有记录的时候显示找不到任何记录,通过这两种状态就可以猜解字段名了,所以网页不出错不能说明是安全的
5、忽略post提交的信息
很多人对url上传递的东西过滤严格,对于post的东西不理不睬是不对的,post的东西更加容易被注入,因为一般字段比较多
在asp.net中强烈建议通过参数来实现sql而不是sql拼接,因为就算你每一个都过滤百密难有疏
比如:
C#代码
- SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
- SqlCommand comm=new SqlCommand("update tb1 set vName=@vName,iAge=@iAge where ID=@id",conn);
- SqlParameter parm1=new SqlParameter("@vName",SqlDbType.NVarChar,50);
- parm1.Value=((TextBox)e.Item.FindControl("name")).Text;
- SqlParameter parm2=new SqlParameter("@iAge",SqlDbType.Int);
- parm2.Value=((TextBox)e.Item.FindControl("age")).Text;
- SqlParameter parm3=new SqlParameter("@id",SqlDbType.Int);
- parm3.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex];
- comm.Parameters.Add(parm1);
- comm.Parameters.Add(parm2);
- comm.Parameters.Add(parm3);
- conn.Open();
- comm.ExecuteNonQuery();
- conn.Close();
这样的代码看起来舒服而且又安全,何乐不为?
[一线风 最后修改于:2008-1-30 10:15:00]
相关文章:
- sql server 2000可以放多少个表,多少个数据库,多少个用户连接? [2009年3月12日 17:47]
- select查询原理 [2008年11月20日 9:30]
- mssql多索引的应用 [2008年3月24日 17:45]
- ASP/SQL 注入天书 [2008年2月2日 16:33]
- 在Sql200里的存储过程里应用循环 [2007年6月5日 13:49]
- SQL Server 2000优化SELECT语句方法 [2007年5月22日 15:33]
- SQL Server数据库开发的二十一条军规 [2007年5月21日 9:18]
- SQL2000里的数据类型 及使用~ [2007年5月21日 9:15]
- 浅谈MS-SQL锁机制 [2007年3月28日 14:26]
- 使用 with(nolock) 时的一点小情况~ [2007年2月12日 14:46]
- 精妙sql语句(完全版) [2007年1月31日 13:20]
- Sql Server、Oracle以及Access数据库 判断字段是否为空的办法 [2006年12月28日 14:31]
订阅地址
