当前位置: 首页 > news >正文

9.4.1 使用参数来防止SQL注入

  SQL注入的威力是不可忽视的,下面我们主要介绍防范方法——使用参数化SQL。对于不同的数据供应器都有对就的 Parameter 来表示SQL语句或者存储过程中的各种参数。参数和数据库字段的真实类型——对应,所有参数的值会仅仅被认为一个参数。因此,在参数中任何SQL语句都是没有意义的。
string  sConnectionString  =   @" Server=(local)\SQLEXPRESS;database=Forum;Trusted_Connection=True " ;
using  (SqlConnection conn  =   new  SqlConnection(sConnectionString))
{
    conn.Open();
    
using  (SqlCommand cmd  =   new  SqlCommand( " SELECT COUNT(*) FROM tbClass WHERE ClassName=@ClassName " , conn))
    {
        cmd.Parameters.AddWithValue(
" @ClassName " , tb_ClassName.Text);
        Response.Write(
string .Format( " 共有{0}条记录符合要求<br /> " , cmd.ExecuteScalar().ToString()));
    }
}

 

在这段程序中,我们使用参数代替字符串的拼接。我们需要注意如下几点。

·SQL语句或者存储过程中指定的所有参数必须和Parameters属性中的所有参数对应。

·参数集合的Add()方法有多种重载

 

cmd.Parameters.AddWithValue( " @ClassName " , tb_ClassName.Text);

// 就可以替代

cmd.Parameters.Add(
" @ClassName " , SqlDbType.VarChar,  50 );
cmd.Parameters[
" @ClassName " ].Value  =  tb_ClassName.Text;

 

  AddWithValue()方法会自动检测参数的类型和长度,对于Add()方法其实也可以省略参数类型和长度。不过为了程序的可读性还是建议你为参数指字类型和长度,当然这个类型和长度需要和数据库字段的真实类型和长度对应。

  我们还注意到,SqlParameter 对象有一个 Diection 方法。对于SQL语句中的参数,这个值没有什么意义,它是用来指定存储过程参数方向。它的值由 ParameterDirection 枚举来定义,共有以下4个类型。

      ·Input

  ·InputOutput

  ·Putput

  ·ReturnValue

转载于:https://www.cnblogs.com/0754ydj/archive/2008/07/30/1256783.html

相关文章:

  • ASP.NET 框架 之HttpHandler
  • 判断“textbox为空”写法
  • Using System.Threading
  • Windows Server 2008 参考价格
  • 我是一个*** (九)
  • SET NOCOUNT 使用说明
  • JSP学习笔记(二十一):struts2中访问request,application对象
  • vb.net中的键盘事件处理
  • 开源与云计算
  • 我的博客也是男的(还好)
  • 转自Microsoft-DDOS处理参考-如何:强化 TCP/IP 堆栈安全
  • 普天C++笔试题
  • 在 VS 中查找替换时使用正则表达式的语法
  • 剧透和评析之車輪の国、向日葵の少女
  • 《案例精解企业级网络构建》书评
  • “大数据应用场景”之隔壁老王(连载四)
  • Android 控件背景颜色处理
  • Android单元测试 - 几个重要问题
  • Angular2开发踩坑系列-生产环境编译
  • Apache的80端口被占用以及访问时报错403
  • const let
  • Effective Java 笔记(一)
  • Java 网络编程(2):UDP 的使用
  • Javascript编码规范
  • Java-详解HashMap
  • JS笔记四:作用域、变量(函数)提升
  • passportjs 源码分析
  • rc-form之最单纯情况
  • React-Native - 收藏集 - 掘金
  • 程序员该如何有效的找工作?
  • 近期前端发展计划
  • 来,膜拜下android roadmap,强大的执行力
  • 每天一个设计模式之命令模式
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用SAX解析XML
  • 我的zsh配置, 2019最新方案
  • 系统认识JavaScript正则表达式
  • 学习笔记:对象,原型和继承(1)
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 阿里云服务器购买完整流程
  • 第二十章:异步和文件I/O.(二十三)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (一)SpringBoot3---尚硅谷总结
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .gitignore
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core 中的路径问题
  • .NET面试题(二)
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [C#] 我的log4net使用手册