1. 把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数”
  2. SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数:
    •  参数的设定:

      string strCmd = "SELECT AccountID FROM Account WHERE AccountName=@AccountName AND password=@password";

      对于SQL Server数据库,“@”是参数的前缀。上句中定义了两个参数:@AccountName,@password。

    • 在执行命令前给参数赋值:
          SqlCommand cmd = new SqlCommand(strCmd, conn);
      cmd.Parameters.AddWithValue("@AccountName", userName);
      cmd.Parameters.AddWithValue("@password", password);
      cmd.ExecuteReader();
  3. 可以看出,SQL中的参数就跟平常函数中的参数一样,先声明,后赋值。在执行SQL命名时,将会把参数值当成一个字符串整体来进行处理,即使参数值中包含单引号,也会把单引号当成单引号字符,而不是字符串的起止符。这样就在某种程度上消除了SQL注入攻击的条件。

代码示例:

 1         static void Main(string[] args)
2 {
3 string userName = "Joe";
4 string password = "123456";
5
6 string strConn = @"server=Joe-PC;database=AccountDBforSQLInjection;uid=sa;pwd=root";
7 SqlConnection conn = new SqlConnection(strConn);
8
9 string strCmd = "SELECT AccountID FROM Account WHERE AccountName=@AccountName AND password=@password";
10 SqlCommand cmd = new SqlCommand(strCmd, conn);
11
12 cmd.Parameters.AddWithValue("@AccountName", userName);
13 cmd.Parameters.AddWithValue("@password", password);
14
15 try
16 {
17 conn.Open();
18 SqlDataReader dr = cmd.ExecuteReader();
19 if (dr.Read())
20 {
21 Console.WriteLine("成功");
22 }
23 else
24 {
25 Console.WriteLine("失败");
26 }
27 }
28 catch (Exception e)
29 {
30 Console.WriteLine(e);
31 }
32 finally
33 {
34 conn.Close();
35 }
36 }

带参数的查询防止SQL注入攻击的更多相关文章

  1. ADO.NET笔记——带参数的查询防止SQL注入攻击

    相关知识: 把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数 ...

  2. 023. Asp.net参数化查询预防Sql注入攻击

    /// <summary> /// 参数化查询预防SQL注入式攻击 /// </summary> public int checkLogin(string loginName, ...

  3. 【spring】(填坑)sql注入攻击 - 持久层参数化

    结果   填坑失败,并没有看懂是如何检测sql攻击的. 只能说的是: 建议都使用参数化传递sql语句参数.(所以,用hibernate.mybatis等框架的真不用太担心sql攻击问题.) 前言 本文 ...

  4. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法

    sql注入攻击详解(二)sql注入过程详解 sql注入攻击详解(一)sql注入原理详解 我们了解了sql注入原理和sql注入过程,今天我们就来了解一下sql注入的解决办法.怎么来解决和防范sql注入, ...

  5. 防止SQL注入攻击的一些方法小结

    SQL注入攻击的危害性很大.在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理.这有利于管理员采取有针对性的防治措施. 一. SQL注入攻击的简单示例. statement := &quo ...

  6. SQL注入攻击

    SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候, ...

  7. ASP.NET中的SQL注入攻击与防护

    什么是SQL注入攻击? 它是在执行SQL查询的时候,由于接收了用户的非法参数从而导致,所执行的SQL语义与业务逻辑原本所要查询的语义不相符,从而实现的攻击. 例如我们经常使用的用户登录,通常会出现这样 ...

  8. php过滤提交数据 防止sql注入攻击

    规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...

  9. SQL注入攻击[详解]

    SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候, ...

随机推荐

  1. clang failed with exit code 1 的常见情况

    1:文件重复,如生成了一份  xxx副本.m 2:reachablity.h 这个文件经常重复. 以上优先检查 .

  2. Devexpress 之gridControl双击行事件

    MouseDown事件 protected internal void gridControl1_MouseDown(object sender, MouseEventArgs e) { DevExp ...

  3. HDOJ/HDU 1556 Color the ball(树状数组)

    Problem Description N个气球排成一排,从左到右依次编号为1,2,3-.N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从 ...

  4. .net常見面試題(二)

    一.选择题 1. 下面叙述正确的是___C___. A.算法的执行效率与数据的存储结构无关 B.算法的空间复杂度是指算法程序中指令(或语句)的条数 C.算法的有穷性是指算法必须能在执行有限个步骤之后终 ...

  5. Response.Write,Page.RegisterClientScriptBlock和Page.RegisterStartupScript的区别

    Response.Write("<script>");输出在文件头部,一打开就执行. RegisterClientScriptBlock一般返回的是客户端函数的包装, ...

  6. [ZETCODE]wxWidgets教程七:对话框

    本教程原文链接:http://zetcode.com/gui/wxwidgets/dialogs/ 翻译:瓶哥 日期:2013年12月9日星期一 邮箱:414236069@qq.com 主页:http ...

  7. [LeetCode] 42. Trapping Rain Water 解题思路

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  8. C#如何将线程中的代码抛到主线程去执行

    private SynchronizationContext mainThreadSynContext; //主线程 mainThreadSynContext = new WindowsFormsSy ...

  9. 快捷键Ctrl+c、Ctrl+d、Ctrl+u、Ctrl+a、Ctrl+e

    tab:命令或路径补全键 Ctrl +c :终止当前任务命令或程序 Ctrl +d :退出当前用户环境 Ctrl +Shift+c   ssh客户端ssh里复制的命令 Ctrl + a到开头 Ctrl ...

  10. 中文字符串的编码转换(c实现)

    中文字符串在c/c++中表示为字节序列,在分词的时候需要根据不同的编码方式进行分词,一般分词器需要转换成统一的编码方式再进行转换,有些分词器如ICTCLAS在分词的时候可以不显示定义编码方式,可以检测 ...