(论坛答疑点滴)有关sql注入

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

http://community.csdn.net/Expert/topic/3803/3803170.xml?temp=.6236078大家存在5点误区:

1、sql注入比较难防,需要替换select,delete等一打字符

其实对于字符型替换再多都没有替换单引号为两个单引号来的好!对于数字型替换再多都没有用,一定要类型转换。

2、忽略DropDownList传来的东西

其实是不对的,一切客户端的东西都是不可信任的,select下拉框也是!因为可以自己做一个htm提交到服务器。

3、access比sqlserver不安全

安全不安全关键看怎么用,如果sqlserver还是像access一样用,一个sa帐户的话,很明显,sqlserver比access不安全,可以直接得到表名和字段名!access反而倒安全点了,因为只能通过逐位猜解得到。

4、网站没有显示出错信息就说明网站是安全的

当有记录的时候显示记录,没有记录的时候显示找不到任何记录,通过这两种状态就可以猜解字段名了,所以网页不出错不能说明是安全的

5、忽略post提交的信息

很多人对url上传递的东西过滤严格,对于post的东西不理不睬是不对的,post的东西更加容易被注入,因为一般字段比较多

在asp.net中强烈建议通过参数来实现sql而不是sql拼接,因为就算你每一个都过滤百密难有疏

比如:

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();

这样的代码看起来舒服而且又安全,何乐不为?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航