网络编程
位置:首页>> 网络编程>> 数据库>> 加固SQL参数与存储过程

加固SQL参数与存储过程

  发布时间:2012-03-12 19:44:08 

标签:sql,存储过程

本节为读者讲解如何利用ADO.NET本身的参数对象和存储过程技术防止注入攻击,以达到用户界面输入与原始SQL的分离,使黑客无法拼接SQL语句的目的。

SQL参数与存储过程

SQL参数是开发人员很容易忽视的一个环节,通常直接完成SQL语句,然后传递给数据库执行。这样的写法固然简单,但是也为注入攻击埋下了伏笔。如果要避免注入攻击,就要对SQL语句进行专门的过滤处理,但如果直接使用SQL参数对象就可以省去以上 环节。

SQL中的Parameters集合提供了类型检查和长度验证。如果研发人员使用Parameters集合,输入将被视为文本值进行处理,SQL不会将它视为可执行代码。使用Parameters集合的另一个好处是可以实施类型和长度检查,如果值超出范围将触发异常。这是纵深防范的一个好例子。尽可能地使用存储过程,而且应该通过Parameters集合调用它们。

下面通过几行代码说明如何使用参数集合对象,读者注意@au_id参数将被当作文本值而不是可执行代码。同样,对参数将进行类型和长度检查。在下面的示例中,输入值不能长于11个字符。如果数据不遵守参数所定义的类型或者长度,将出现异常。

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;

请读者注意,使用存储过程并不一定能防止SQL注入。重要的是在存储过程中使用参数对象。如果不使用参数,存储过程使用未经筛选的输入时,就很容易遭到SQL注入攻击。例如,以下代码片段就存在问题:

SqlDataAdapter myCommand = new SqlDataAdapter("LoginStoredProcedure '" +

Login.Text + "'", conn);

正确的代码片段如下所示:

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;

0
投稿

猜你喜欢

  • 数据库(database)MySQL 是最流行的开源数据库系统,可运行于几乎所有的操作系统平台。在《MySQL 安装》一文中详解介绍了安装步
  • 1、查找表结构,判断要加入的列是否已存在2、如果不存在,则执行添加 CREATE PROCEDURE `mysql_sp_add_
  • 前几天光耀童鞋喷了一篇《谈网站注册、登录过程》,今天我们在与小爬童鞋梳理购买流程的时候也谈到了这部分内容。其实注册作为一个网站基本功能再普通
  • 看新闻说Chrome的Javascript引擎很强大,执行速度很快。就随便写了一个1,000,000次的累加放到IE和Chrome下测试,效
  • 利用FSO取得BMP,JPG,PNG,GIF文件信息:大小,宽、高尺寸等 ’:::::::::::::::::::::::::::
  • ASP如何分两段读取数据库?中间插入广告。代码如下:<!--#include file="conn.asp"--&
  • 数据库技术是计算机科学中发展最快的领域之一,数据库的诞生和发展给计算机信息管理带来了一场巨大的革命。数据库的诞生和发展给计算机信息管理带来了
  • 作为一位不懂代码的业余网页制 * 好者,常常羡慕专业程序人员在浏览器中编制出的效果超酷的一些多媒体作品。唉,无奈程序那东东,酶涩南学,非一日之
  • 众所周知当前(甚至接下来的几年)最酷的东西是iPhone。不仅仅是因为iPhone看起来不错,它们在网站方面也很不错。而且,更重要的是,很多
  • 在 MySQL 中,数据库和表对应于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在
  •  我们可以先建立一个包含文件名,文件标题的待检索文件的数据库,然后,用ADO方式来访问它,并建立记录集对象。具体代码和说明见下:
  • 数据库快照是怎样工作的可以使用典型的数据库命令CREATE DATABASE语句来生成一个数据库快照,在声明中有一个源数据库快照的附加说明。
  • 在用wordpress这个博客的时候,我很奇怪的发现,最近写的内容排在第一页,而最早写的成了最后页。这显然有悖逻辑,正常的情况应该是最早写的
  • 表格制作好了,内容也有了,怎么看着别扭呀!哦,还没有给表格化化装--格式化表格呀,俗话说:人靠衣服也靠鞍,要想让你制作的网页漂漂亮亮、美观大
  • 说实话,对于移除这个旧有功能对于我来说,我是欢心鼓舞的。因为我在开发和应用当中一向不用expression来处理,虽然它确实是非常方便,比如
  • 问题背景:日常对Sql Server 2005关系数据库进行操作时,有时对数据库(如:Sharepoint网站配置数据库名Sharepoin
  • Google以其简洁的搜索框引领着互联网,搜索系统似乎成了每个网站必备品,甚至于是那些本身几乎是由静态页面组成的企业网站都要来个搜索功能,这
  • 没事在这里发一下关于数据库大批量插入数据的效率对比,用ACCESS和MSSQL,数值是在本机测试,根据不同的环境和配置,数值可能会有较大差别
  • 一、无组件上传的原理我还是一点一点用一个实例来说明的吧,客户端HTML如下。要浏览上传附件,我们通过<input type="
  • 学习目的: 学习ADO.NET用法,并如何用DataRearder读取数据 今天练习数据库的最基本用法,如何打开数据库。首先在网站设置文件w
手机版 网络编程 asp之家 www.aspxhome.com