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. Unity3D-基本导航(NavMesh)功能实现

    1: 打开场景 2:打开Navgation窗口 菜单中: Window --> Navgation, 在Inspector旁边会出现导航界面 这个Objcet的面板是对应当前选择的物体的,旁边的 ...

  2. load dll

    Assembly myassembly = Assembly.LoadFrom("testdll.dll"); Type type = myassembly.GetType(&qu ...

  3. python 零散记录(七)(上) 面向对象 类 类的私有化

    python面向对象的三大特性: 多态,封装,继承 多态: 在不知道对象到底是什么类型.又想对其做一些操作时,就会用到多态 如 'abc'.count('a') #对字符串使用count函数返回a的数 ...

  4. 记录:Ubuntu下安装mysql

    >>更新源列表 在终端中输入:sudo apt-get update 更新完成后输入:sudo apt-get install mysql-server mysql-client 接着输入 ...

  5. 浏览器兼容console对象的简要解决方案

    不同浏览器或者版本之间对于console对象的支持不尽相同,而console方法在开发调试过程中都是不错的工具.难道要在上线前把所有console.xxxx去掉以保证某些浏览器不报错么.其实可以变通解 ...

  6. KVM虚拟化技术

    KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machi ...

  7. Request To JavaBean(请求对象转换为JavaBean对象)

    背景: 经常要从request等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,麻烦  一 参考资料 1 http://jc-dreaming.iteye.com/blog/563893 ...

  8. 理解标签重置reset

    /*样式表文件来自 懒人css http://lrcss.lrjz100.com *//*---------重置---------*/html{font-size: 100%;-webkit-text ...

  9. Excel中如何查找并列出所有链接(外部数据链接)?

    在 Excel 中,有时会需要创建外部链接来引用其他工作簿的单元格内容,但是如果想要找出所有链接并且还要将这些外部数据链接列在一个工作簿当中是有点难度的.下面我会介绍一些快捷方法,不仅能够快速帮你找出 ...

  10. C的printf与scanf的用法

    之前没学过C语言,只学过C++,所以就来自学下C语言了,其实个人认为C与C++的区别很小,基本上就是printf与scanf这点输出和输入的区别了,如果还有什么区别的话那就是要包含的头文件是不同的.比 ...