- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQL攻击的分析与防范
SQL攻击的分析与防范
?
关键字SQL,注入,攻击,方法,防范,安全
近来,当打开网站,查看网页新闻时,会看到一系列有关SQL注入攻击的新闻:
1月,自动SQL注入攻击了超过70,000个美国网站。
4月,F-Secure表示其发现超过五十万网页都被恶意JavaScript代码攻击。
7月,索尼游戏机PlayStation(PS)的美国网站遭到SQL注入攻击。
10月,Adobe旗下网站遭受SQL注入攻击。
…
可见,SQL注入攻击的危害十分巨大。但SQL注入攻击也不是洪水猛兽,只要在开发Web程序时多加防范,就可以减少SQL注入攻击的威胁。本文从原理上分析实现SQL注入的一般方法,并根据这些方法提出相应的防范措施,为Web程序的开发提供一些帮助。
一、SQL注入原理据统计,目前国内80%以上的网站都是采用Web动态网页结合后台数据库架设而成的。网页先从用户的请求中得到某些参数,然后动态地生成SQL语句请求发送给数据库,再把从数据库中得到的结果返回给网页,从而完成网页执行的功能。
然而,在许多Web网站系统开发过程中,由于程序员编写的代码没有对用户输入数据的合法性进行判断,造成应用程序存在安全隐患。恶意攻击者可以利用用户可提交或可修改的数据,构造出特殊目的SQL语句,并将其插入到系统实际执行的SQL语句中,从而随意获取数据库中的重要信息(如管理员用户名和密码等),修改、添加和删除数据库,甚至控制整个网站服务器。这就是所谓的SQL Injection,即SQL注入式攻击,简称SQL注入。
简单地说,所谓SQL注入漏洞就是用户可提交构造特殊的SQL语句并得到执行的情形。所谓SQL注入攻击,就是利用SQL注入漏洞,非法获取数据库信息,或者入侵网站服务器的行为。
安全专家提示:SQL注入是从正常的WWW端口进行访问网站,表面上看跟一般的Web页面访问没什么区别,所以目前市面上的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会察觉,从而造成数据的泄漏,给网站带来巨大损失。并且随着Web2.0功能得到增强,SQL注入漏洞的风险也随之加大,黑客也在不断优化他们的攻击手段和工具。
二、SQL注入方法
1.收集程序及服务器信息。
在没有设置防注入的网站中,可以通过默认链接正常打开新的页面(测试地址:.../test1/news/show.asp?id=78),但是在这个地址后面加上单引号“”,服务器将会返回下面的错误提示:
Microsoft JET Database Engine 错误 80040e14
字符串的语法错误 在查询表达式 ID = 78 中。
/news/shown.asp,行 6
通过这个错误提示,能获取以下几点信息:
(1).该网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
(2).程序没有判断客户端提交的数据是否符合程序要求。
(3).该SQL语句所查询的表中有一名为ID的字段。
根据这些提示信息,就可以进一步进行SQL注入测试。
2.获取后继页面信息
在ASP程序中,往往利用querystring参数进行不同页面之间的数据传递,在要打开新的链接时,ASP服务器先从URL中提取出querystring参数中的ID值,然后根据ID值动态生成后继页面。如有以下代码:
ID = Request(ID)
SQL = Select * From news Where Id= ID
Set RS = Server.CreateObject(ADODB.Recordset)
RS.Open SQL, DSN=...
Do While Not RS.EOF
Response.Write RS(Content)
Rs.MoveNext
Loop
Set RS = Nothin
在一般情况下,此ASP脚本能够显示具有特定ID值的文章的内容( .../test1 /news/shown.asp?ID=78),而 ID 值是由URL中的 querystring 参数指定的。然而此段代码存在SQL注入攻击漏洞。某些恶意用户可以把querystring中的ID值偷换为“78 or 1=1”,则原URL变为:.../test1/news/shown.asp?ID=78 or 1=1,从而诱使ASP脚本生成不安全的SQL指令如下:
Select * From news Where ID=0 or 1=1
因1=1永远成立,所以原SQL指令等效为:
于是,数据库将会返回所有文章的内容。当然,本例中服务器所受的攻击只是文章信息的泄漏,并不会引起很严重后果。但是,如果攻击者用同样的手段发送DELETE等SQL指令有可能把表里的内容全部删除。
3.非法成功提交表单
SQL注入攻
文档评论(0)