zoukankan      html  css  js  c++  java
  • (论坛答疑点滴)有关sql注入

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

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

  • 相关阅读:
    EasyUI--Alert()
    asp.net 页面之间传值的几种方式
    c# 的类成员
    c# protected public private internal
    C#中的多态性
    c# 静态成员和实例成员的区别
    js确认框confirm()用法实例详解
    JS中的switch case
    分分钟用上C#中的委托和事件
    Asp.net MVC中关于@Html标签Label、Editor使用
  • 原文地址:https://www.cnblogs.com/lovecherry/p/134546.html
Copyright © 2011-2022 走看看