电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> ASP
防范SQL指令植入式攻击-ASP教程,安全加密
作者:网友供稿 点击:16
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
什么是sql 指令植入式攻击?
在设计或者维护 web 网站时,你也许担心它们会受到某些卑鄙用户的恶意攻击。的确,如今的 web 网站开发者们针对其站点所在操作系统平台或web 服务器的安全性而展开的讨论实在太多了。不错,iis 服务器的安全漏洞可能招致恶意攻击;但你的安全检查清单不应该仅仅有 iis 安全性这一条。有些代码,它们通常是专门为数据驱动(data-driven) 的 web 网站而设计的,实际上往往同其它 iis 漏洞一样存在严重的安全隐患。这些潜伏于代码中的安全隐患就有可能被称为“sql 指令植入式攻击” (sql injection) 的手段所利用而导致服务器受到攻击。
sql 指令植入式攻击技术使得攻击者能够利用 web 应用程序中某些疏于防范的输入机会动态生成特殊的 sql 指令语句。举一个常见的例子:
某 web 网站采用表单来收集访问者的用户名和密码以确认他有足够权限访问某些保密信息,然后该表单被发送到 web 服务器进行处理。接下来,服务器端的asp 脚本根据表单提供的信息生成 sql 指令语句提交到 sql 服务器,并通过分析 sql 服务器的返回结果来判断该用户名/密码组合是否有效。
为了实现这样的功能,web 程序员可能会设计两个页面:一个 html 页面 (login.htm) 用于登录,另一个asp 页面 (execlogin.asp) 用于验证用户权限(即向数据库查询用户名/密码组合是否存在)。具体代码可能象这样:
login.htm (html 页面)

<form action="execlogin.asp" method="post">
username: <input type="text" name="txtusername"><br>
password: <input type="password" name="txtpassword"><br>
<input type="submit">
</form>

execlogin.asp (asp 页面)

<%
dim p_strusername, p_strpassword, objrs, strsql

p_strusername = request.form("txtusername")
p_strpassword = request.form("txtpassword")

strsql = "select * from tblusers " & _
"where username=" & p_strusername & _
" and password=" & p_strpassword & ""

set objrs = server.createobject("adodb.recordset")
objrs.open strsql, "dsn=..."

if (objrs.eof) then
response.write "invalid login."
else
response.write "you are logged in as " & objrs("username")
end if

set objrs = nothing
%>

乍一看,execlogin.asp 的代码似乎没有任何安全漏洞,因为用户如果不给出有效的用户名/密码组合就无法登录。然而,这段代码偏偏不安全,而且它正是sql 指令植入式攻击的理想目标。具体而言,设计者把用户的输入直接用于构建sql 指令,从而使攻击者能够自行决定即将被执行的 sql 指令。例如:攻击者可能会在表单的用户名或密码栏中输入包含“ or ”和“=” 等特殊字符。于是,提交给数据库的 sql 指令就可能是:

select * from tblusers where username= or = and password = or =

这样,sql 服务器将返回 tblusers 表格中的所有记录,而 asp 脚本将会因此而误认为攻击者的输入符合 tblusers 表格中的第一条记录,从而允许攻击者以该用户的名义登入网站。
sql 指令植入式攻击还有另一种形式,它发生在 asp 服务器根据 querystring 参数动态生成网页时。这里有一个例子,此 asp 页面从 url 中提取出 querystring 参数中的 id 值,然后根据 id 值动态生成后继页面:

<%
dim p_lngid, objrs, strsql
p_lngid = request("id")

strsql = "select * from tblarticles where id=" & p_lngid

set objrs = server.createobject("adodb.recordset")
objrs.open strsql, "dsn=..."

if (not objrs.eof) then response.write objrs("articlecontent")

set objrs = nothing
%>

在一般情况下,此 asp 脚本能够显示具有特定 id 值的文章的内容,而 id 值是由 url 中的 querystring 参数指定的。例如:当url为 http://www.example.com/article.asp?id=1055 时,asp 就会根据 id 为 1055 的文章提供的内容生成页面。
如同前述登录页面的例子一样,此段代码也向sql 指令植入式攻击敞开了大门。某些恶意用户可能会把 querystring 中的文章 id 值偷换为“0 or 1=1”等内容(也就是说,把 url 换成 http://www.example.com/article.asp?id=0 or 1=1) 从而诱使 asp 脚本生成不安全的 sql 指令如:

select * from tblarticles where id=0 or 1=1

于是,数据库将会返回所有文章的内容。
当然了,本例服务器所受的攻击不一定会引起什么严重后果。可是,攻击者却可能变本加厉,比如用同样的手段发送 delete 等 sql 指令。这只需要简单地修改前述 url 中的 querystring 参数就可以了!例如:任何人都可以通过 “http://www.example.com/article.asp?id=1055; delete from tblarticles ” 之类的 url 来访问 web 网站。
sql 指令植入式攻击的危害
sql 指令植入式攻击可能引起的危害取决于该网站的软件环境和配置。当 web 服务器以操作员(dbo)的身份访问数据库时,利用sql 指令植入式攻击就可能删除所有表格、创建新表格,等等。当服务器以超级用户 (sa) 的身份访问数据库时,利用sql 指令植入式攻击就可能控制整个 sql 服务器;在某些配置下攻击者甚至可以自行创建用户帐号以完全操纵数据库所在的 windows 服务器。
杜绝sql 指令植入式攻击
杜绝sql 指令植入式攻击的第一步就是采用各种安全手段监控来自 asp request 对象 (request 、 request.querystring 、 request.form 、 request.cookies 和 request.servervariables) 的用户输入,以确保 sql 指令的可*性。具体的安全手段根据你的 dbms 而异,下面给出的都是基于 ms sql server的例子。
在前述登录页面的例子中,脚本期望得到的两个输入变量 (txtusername 和 txtpassword)均为字符串类型。无论用户在哪个参数中插入单引号,他都可能让数据库执行单引号中的 sql 指令。为了杜绝此类sql 指令植入式攻击,我们可以借助 replace 函数剔除单引号,比如:
p_strusername = replace(request.form("txtusername"), "", "")
p_strpassword = replace(request.form("txtpassword"), "", "")
在第二个例子中,脚本期望的输入变量是长整型变量 (id) 。用户可以通过在 id 参数中插入特殊字符来运行不安全的 sql 指令。为了为了杜绝此类sql 指令植入式攻击,我们只需要借助 clng 函数限制 id 值为长整型变量,比如:
p_lngid = clng(request("id"))
当用户试图在 id 中包含特殊字符时,clng 就会产生一个错误。
为了进一步减少sql 指令植入式攻击的危胁,请务必清除客户端错误信息文本中的所有技术资料。某些错误信息往往泄露了技术细节,从而让攻击者可以看出服务器的安全漏洞所在。这里指的错误信息不但包括应用程序生成的消息框,还包括来自 iis 的出错提示。为此,你可以禁止由 iis 发送的详细错误信息,而改用自定义的出错页面。(关于创建自定义的出错页面的更多信息,请务必参阅 《creating custom asp error pages》。)
最后,为了减轻sql 指令植入式攻击的危害,请限制 web 应用程序所用的数据库访问帐号权限。一般来说,应用程序没有必要以 dbo 或者 sa 的身份访问数据库。记住,给它的权限越少,你的网站越安全!你还可以考虑分别给每个需要访问数据库的对象分配只拥有必需权限的帐号,以分散安全漏洞。例如:同是前端用户界面,当用于公共场所时就比用于具有本地内容管理机制的平台时更加需要严格限制数据库访问权限。
相关资料
在 internet 上有许许多多关于本话题的有用资源。我想下列连接可能会对你有所帮助:
* sql injection faq (http://www.sqlsecurity.com/)
* advanced sql injection white paper (http://www.nextgenss.com/research.html)
* preventing sql injection (http://www.owasp.org/asac/input_validation/sql.shtml)
* designing secure web-based applications for microsoft windows 2000 (http://www.amazon.com/exec/obidos/asin/0735609950/4guysfromrollaco),此书值得一看。


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·如何使XP的目录属性出现"安全"选项-ASP教程,系统相关
·创建有个性的对话框之MFC篇(二)-ASP教程,系统相关
·用InstallShield打包ASP程序-ASP教程,ASP应用
·windows server 2003 中 SQL Server 2000 分布式事务 错误解决方法-ASP教程,系统相关
·创建有个性的对话框之MFC篇(一)-ASP教程,系统相关
·DevExpress打印相关代码-ASP教程,打印相关
·File文件控件,选中文件(图片,flash,视频)即立即预览显示-ASP教程,组件开发
·用Windows的文件映射机制,实现大批量数据的快速存储-ASP教程,系统相关
·ADO如何取得数据库中表的字段信息之一
·使用DEVEXPRESS部件打印时标题的处理-ASP教程,打印相关

最新文章
· SQL注入天书 - ASP注入漏洞全接触
·用.net 处理xmlHttp发送异步请求
·asp.net创建文件夹的IO类的问题
·如何实现ASP.NET网站个性化
·关于ASP.NET调用JavaScript的实现
·ASP利用Google实现在线翻译功能
·Asp无组件生成缩略图
·由HTTP 500 Internal server error想到的...
·实例讲解asp抓取网上房产信息
·改mdb为asp所带来的灾难




版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号