[关键词]存储过程 SQL Injection

[摘要]随着网络应用的发展日益突出,在各式各样的网络攻击中,SQL Injection是最为常用的攻击手段,攻击者利用可能引发错误的SQL语句使网页或程序出现异常后,获取信息分析网站结构组成从而控制网站。存储过程是一组编译在单个执行计划中的SQL 语句,存储过程不仅能提高运行效率,也是防范SQL Injection攻击的有效手段之一。
中国论文网 http://www.xzbu.com/3/view-1479361.htm
  [关键词]存储过程 SQL Injection
  
  Internet站点设计从以往基于静态HTML 的技术发展到以数据库为中心的高度交互的Web应用程序。由于数据库的存在,攻击者在对网站的数据库攻击中SQL Injection是最为常用的手法,它是利用SQL命令引发数据库的错误信息的攻击手段。本文在一定程度上能解决注入攻击的安全问题。存储过程是 SQL 语句和可选控制流语句的预编译集合,它执行效率比动态创建的SQL语句效率要高的多,这是程序员使用存储过程首先想到的主要功能,但存储过程对于程序安全性和对SQL Injection防范作用同样意义重大。
  一、SQL Injection原理分析
  SQL Injection是在代码中直接将未经过过滤和检测的情况下直接引入到了SQL语句中,攻击者只要了解程序语句、数据库结构,就可轻易写出带有破坏性或其它目的的SQL语句来,从而控制整个主机。SQL Injection攻击的方法还有很多,防止攻击的通常方法是 程序员编写函数代码严格过滤产生执行异常或逻辑错误的字符,但攻击者SQL Injection规避 入侵检测的技术也花样翻新,攻击者运用编码技术绕过ASCII编码,如or 1=1可以用%6f%72%20%31%3d%31代替,对于防范此类攻击会增加难度,同时程序执行效率也会降低并影响到一些正常的内容输入。
  二、存储过程概述
  存储过程是一组编译在单个执行计划中的 Transact-SQL 语句,存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。在一个存储过程内,可以设计、编码和测试执行某个常用任务所需的 SQL 语句和逻辑,之后每个需要执行该任务的应用程序只须执行此存储过程即可。如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比 Transact-SQL 批代码的执行要快。一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。
  三、存储过程安全防范应用
  以身份验证页面为例,在SQL Server2000中编写存储过程:
  CREATE PROCEDURE da_login @username varchar(16),@password varchar(50) AS
   SET NOCOUNT ON
   SELECT* FROM users WHERE username=@username and password=@password
  GO
  该存储过程包含两个输入参数@username和@password,数据类型为varchar,设用户提交的username为李四’--,password为321。如果不用存储过程,验证SQL语句为:select * from users where username=’李四’--‘and password=’321’,密码后面语句被解释为注释语句,这样只对用户名进行验证,而不对密码进行验证。存储过程参数用于在存储过程和调用存储过程的应用 程序或工具之间交换数据:输入参数允许调用方将数据值传递到存储过程,输出参数允许存储过程将数据值或游标变量传递回调用方,他们被预先作为独立的数据体与SQL语句交互,上例使用da_login存储过程验证:李四’--,作为一个标准varchar的字符串传递给参数@username,即username的值为李四’--;321作为一个标准varchar的字符串传递给参数@password,即password的值为321,两个参数之间不会进行字符串重组,即存储过程里的SQL查询语句不会组合为select * from users where username=’李四’- -‘and password=’321’,因而da_login存储过程验证是对用户名和密码的完整性验证,是有效地身份验证,在高效能访问 数据库的同时,解决了SQL Injection攻击。
  四、结论
  在编写带有数据库的Web应用程序中,使用存储过程能极大地提高程序执行效率,利用存储过程中参数的整体一致性,将用户交互的数据作为参数传递给存储过程中的Transact-SQL语句,不会导致语句执行异常,不仅扩展了数据录入内容的范围、减少了代码编写的难度,也可有效地防止SQL注入攻击带来的危害。在应用程序中使用存储过程并且配合完善的错误捕获功能,可以开发出高效健壮的网络应用程序,减少攻击带来的损失,保证网络服务持续有效地运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值