技巧和诀窍:防范SQL注入攻击
【原文地址】Tip/Trick: Guard Against SQL Injection Attacks
【原文发表日期】 Saturday, September 30, 2006 9:11 AM
SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西。不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是,他们的客户极其容易受到攻击。
Michael Sutton 最近发表了一篇非常发人深省的帖子,讲述在公共网上这问题是多么地普遍。他用Google的Search API建了一个C#的客户端程序,寻找那些易受SQL 注入攻击的网站。其步骤很简单:
寻找那些带查询字符串的网站(例如,查询那些在URL里带有 "id=" 的URL)
给这些确定为动态的网站发送一个请求,改变其中的id=语句,带一个额外的单引号,来试图取消其中的SQL语句(例如,如 id=6' )
分析返回的回复,在其中查找象“SQL” 和“query”这样的词,这往往表示应用返回了详细的错误消息(这本身也是很糟糕的)
检查错误消息是否表示发送到SQL服务器的参数没有被正确加码(encoded),如果如此,那么表示可对该网站进行SQL注入攻击
对通过Google搜寻找到的1000个网站的随机取样测试,他检测到其中的11.3%有易受SQL注入攻击的可能。这非常,非常地可怕。这意味着黑客可以远程利用那些应用里的数据,获取任何没有hashed或加密的密码或信用卡数据,甚至有以管理员身份登陆进这些应用的可能。这不仅对开发网站的开发人员来说很糟糕,而且对使用网站的消费者或用户来说更糟糕,因为他们给网站提供了数据,想着网站是安全的呢。
那么SQL注入攻击到底是什么玩意?
有几种情形使得SQL注入攻击成为可能。最常见的原因是,你动态地构造了SQL语句,却没有使用正确地加了码(encoded)的参数。譬如,考虑这个SQL查询的编码,其目的是根据由查询字符串提供的社会保险号码(social security number)来查询作者(Authors):
Dim SSN as String
Dim SqlQuery as String
SSN = Request.QueryString("SSN")
SqlQuery = "SELECT au_lname, au_fname from authors WHERE au_id = '" + SSN + "'"
如果你有象上面这个片断一样的SQL编码,那么你的整个数据库和应用可以远程地被黑掉。怎么会呢?在普通情形下,用户会使用一个社会保险号码来访问这个网站,编码是象
相关文档:
Select CONVERT(varchar(100), GETDATE(), 23);
返回形式:2008-11-29
Select CONVERT(varchar(100), GETDATE(), 102)
返回形式:2008.11.29
Select CONVERT(varchar(100), GETDATE(), 101)
返回形式:11/29/2008
更多详情请参见如下列表:
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 ......
if exists(select 1 from sysobjects where name='char_index')
drop function char_index
create function char_index(@string varchar(8000),@char varchar(10),@index smallint)
--@string:待查找字符串,@index:查找位置
returns smallint
as
begin
declare
@i tinyint,--当前找到第@i个
  ......
==============================================
第01讲: Chapter 00--Oracle 11g SQL Fundamentals Training Introduction
在线观看: http://www.boobooke.com/v/bbk2003
视频下载: http://www.boobooke.com/v/bbk2003.zip
第02讲: Chapter 00--Oracle 11g SQL Fundamentals Training Introduction ......