zoukankan      html  css  js  c++  java
  • 关于安全编写代码的一些注意事项[参照msdn],这些在编程基础中都已经相当重要了!

    1、尽可能使用存储过程,并使用 Parameters 集合来调用它们。结合使用 Parameters 集合和存储过程
    下面的代码片断阐释了 Parameters 集合的用法:
    SqlDataAdapter myCommand = new SqlDataAdapter("AuthorLogin", conn);
    myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
    SqlParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11);
    parm.Value = Login.Text;//这里的Login.Text就是安全防范的接口

    在本例中,@au_id 参数被视为文本值,而非可执行代码。另外,还针对参数进行了类型和长度检查。在上例中,输入值不能长于 11 个字符。如果数据不遵循由参数定义的类型或长度,就会生成异常。

    请注意,使用存储过程不一定会防止 SQL 注入。重要的是结合使用参数和存储过程。如果不使用参数,则在存储过程使用未筛选的输入内容时,它们很容易受到 SQL 注入攻击。例如,下面的代码片断很容易受到攻击:

    SqlDataAdapter myCommand = new SqlDataAdapter("LoginStoredProcedure '" +Login.Text + "'", conn);

    要点 如果使用存储过程,请确保同时使用参数。

    2、结合使用 Parameters 集合和动态 SQL

    如果您不能使用存储过程,仍可以使用参数,如下面的代码片断所示:
    SqlDataAdapter myCommand = new SqlDataAdapter("SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", conn);
    SqlParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id",SqlDbType.VarChar, 11);
    parm.Value = Login.Text;

    从这个代码的例子中我们扩展开来还能想到的当我们调用封装好的类的方法的时候,在写入方法的参数时,我们依然能够用上面的方法进行安全检验("@au_id")

    3、使用筛选例程 用来防止 SQL 注入攻击的另一种方法是开发筛选例程,以便向具有特殊 SQL 含义的字符添加转义符。
    如单撇号字符。下面的代码片断阐释了一个用来添加转义符的筛选例程:
    private string SafeSqlLiteral(string inputSQL)
    {
    return inputSQL.Replace("'", "''");
    }
    这种例程存在着一定的问题,而且您不应完全依赖它们,因为攻击者可以使用 ASCII 十六进制字符来回避检查。但是应该筛选输入内容,并将其作为深层防御策略的一部分。

    注意 不要依赖筛选输入。

    4、使用 LIKE 子句
    请注意,如果您使用 LIKE 子句,通配符仍需要转义符。下面的代码片断阐释了这种技术:

    s = s.Replace("[", "[[]");
    s = s.Replace("%", "[%]");
    s = s.Replace("_", "[_]");


     

  • 相关阅读:
    MongoDB索引使用
    ubuntu14.04下CPU的caffe配置,不成功的朋友请与我(lee)联系,后面附带邮箱
    android4.4 evaluateJavascript 到android2.X上不能调用的问题
    LeetCode122:Best Time to Buy and Sell Stock II
    Hdu-1565 方格取数(1) (状态压缩dp入门题
    TI C66x DSP 四种内存保护问题 -之- 针对CPU訪问外存(DDR3 or MSM)时的内存保护问题
    显示和隐藏Mac隐藏文件的命令
    【微软2014实习生及秋令营技术类职位在线測试】题目1 : String reorder
    钟表效果
    hibernate5(10)注解映射[2]一对多单向关联
  • 原文地址:https://www.cnblogs.com/huashanlin/p/601185.html
Copyright © 2011-2022 走看看