ASP页面安全技术相关研究Word文档下载推荐.docx
- 文档编号:18998317
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:7
- 大小:21.18KB
ASP页面安全技术相关研究Word文档下载推荐.docx
《ASP页面安全技术相关研究Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ASP页面安全技术相关研究Word文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
随着经济全球化的发展,商家、政府、乃至个人都积极地寻求在Internet上发布信息,提供网上管理和服务,从而使网页设计和网站建设成为一种热门行业。
作为微软推出的网页与数据库解决方案,ASP由于有微软得天独厚的操作系统等技术后盾支持,因此得到了迅速的发展,并且正受到越来越多的欢迎。
ASP具有简单、易用、多功能,可扩充性等强大功能。
但是,使用ASP技术制作的站点的安全性问题一直都是Web站点安全问题的重要组成部分。
Web服务的安全主要可以分为自身安全、数据安全及页面安全等三个方面。
自身安全问题主要体现在操作系统、IIS服务系统、数据系统等系统的先天性缺陷;
数据安全问题主要与数据的设计与组织存在重大关系;
页面安全问题主要由页面代码产生。
本文重点讨论的就是ASP页面代码设计安全问题。
实践表明,页面安全问题更多的是由于设计者在设计时不严谨产生的,如果编写代码的时候多注意,是可以避免的。
1验证被绕过
如果用户知道了一个ASP页面的路径和文件名,而这个文件又是要经过验证才能进去的,但是用户直接输入这个ASP页面的文件名,就有可能通过绕过验证。
例如,使用IP为192.168.11.11这台服务器,使用login.asp进入登录界面,通过checkadmin.asp来验证用户和密码,如果用户和密码正确,就转入main.asp进行后台操作。
这时,如果将所有的关卡都放在checkadmin.asp,而对main.asp页面没有设防,则攻击者只要直接在地址栏输入http:
//192.168.11.11/admin/main.asp便可绕过验证。
因此我们应该在所有需要验证的asp页面的开头处进行相应处理。
比如:
判断session()并且跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。
2用户名与口令被破解
即使所有需要验证的asp页面都进行了相应的处理,但是验证页面上的密码验证漏洞仍然可能使你的验证形同虚设,而这实际上是VBSCRIPT中的一个小小的天然缺陷所造成的。
一般我们都是将用户名和密码放在数据库中,在验证的时候采用以下的sql语句:
Setsql="
select*fromuserswhereusername='
&
request("
name"
)&
'
andpassword='
password"
这其中双引号是给VB解释的,单引号是给SQL解释的,即单引号括住的数据将被SQL视为字符串。
假如我们在文本框中输入这样的用户名和密码:
jack'
or'
1'
='
l提交给程序。
我们再看经过编译后的程序,SQL判断就成了"
andpassword='
;
OR是逻辑运算符,作用是在判断两个条件的时候,只要其中一个条件成立,等式将会成立。
而l肯定是等于1的,那么在这行语句中,原语句的"
and"
验证将不再继续,而因为"
1=1"
和"
or"
令语句返回为真值。
这将骗过验证,继续当验证为真时的操作。
解决的方法很多,比较简单的是使用replace函数替换字符的方法来屏蔽掉单引号和空格。
也可以专门用一个文件来屏蔽掉所有可疑的特殊字符;
或者对用户名和密码进行加密换算。
目前我们使用比较广泛的是MD5加密算法,用其对用户的用户名和密码进行MD5加密,每次验证前先进行换算,将换算后的结果拿出来比较。
验证时可以使用如下SQL语句:
select*fromuserswhereuser='
md5(trim(request.form("
username"
)))&
。
此外,涉及用户名与口令的程序最好封装在服务器端,尽量少在ASP文件里出现,涉及与数据库连接的用户名与口令应给予最小的权限。
出现次数多的用户名与口令可以写在一个位置比较隐蔽的包含文件中。
如果涉及与数据库连接,在理想状态下只给它以执行存储过程的权限,千万不要直接给予修改、插入、删除记录的权限。
3特殊字符漏洞
输入框常常是恶意用户利用的一个目标,可通过输入脚本语言等对用户客户端造成损坏;
如果该输入框涉及数据查询,可以利用特殊查询语句,得到更多的数据库数据,甚至表的全部。
因此必须对输入框进行过滤。
主要的防范技巧有:
(1)表单来源过滤。
尽可能过滤掉来自非本主机提交过来的表单,可以判定request.servervariables("
http_referer"
)中是否含有"
http"
头的提交地址。
如果本页面自带表单处理,还可以进行更安全的判定。
(2)表单内容的过滤。
对于id、userid等类型的可以判定是否为整数来过滤。
如:
http:
//*****/jobs.asp?
id=100中如果未过滤,可能会被人提交类似http:
id=12or2=2等取得非法信息。
(3)分清表单提交方法。
对于用get方法传送数据,则用request.querystring来读取数据。
如果使用post方法传送数据,则用request.form来读取数据。
(4)严格控制输入框的信息,对HTML/JavaScript/VBScript语句、特殊字符尽量屏蔽,限定允许输入信息的范围以及对输入字符的长度进行限制,如果在输入框中输入标准的HTML语句或者Javascript语句可能会改变输出结果。
这样其实是很危险的,假如在文本输入框中写入的是个Javascript的死循环,就有可能使其他用户的浏览器因死循环而死掉。
因此编写类似程序时应该做好对此类操作的防范,譬如可以写一段程序判断客户端的输入,或者干脆屏蔽掉所有的HTML、Javascript语句。
4文件泄露问题
当存在asp的主页正在制作并没有进行最后调试完成以前,可以被某些搜索引擎机动追加为搜索对象,如果这时候有人利用搜索引擎对这些网页进行查找,会得到有关文件(.inc)的定位,并能在浏览器中察看到这些文件完整的源代码,从而导致某些敏感信息的泄露。
在要解决这一问题,首先在为.inc文件命名时,不要采用系统默认的或者有特殊含义容易被用户猜测到的文件名,尽量使用无规则的英文字母。
其次还可以对.inc文件内容进行加密。
最后最好使用.asp文件代替.inc文件使用户无法从浏览器直接观看文件的源代码。
5数据库下载漏洞
在用Access做后台数据库时,如果有人通过各种方法知道或者猜到了服务器的Access数据库的路径和数据库名称,那么这个Access数据库文件将有被下载的危险。
对这个的主要防范技巧有:
(1)给数据库文件名称起个复杂的非常规的名字,并把它放在几层目录下。
所谓“非常规”,比如有个数据库要保存的是有关工作的信息,可不要给它起个“jobs.mdb”的名字,而起个怪点的名称,比如sdl9df.mdb,并把它放在如./edslf/o4u/ptdi/的几层目录下,这样要想通过猜的方式得到Access数据库文件就难上加难了。
(2)不要把数据库名写在程序中。
有些人喜欢把DSN写在程序中,比如:
DBPath=Server.MapPath(“jobs.mdb”)
conn.Open"
driver={MicrosoftAccessDriver(*.mdb)};
dbq="
&
DBPath,这样固然可以使程序更加的灵活、方便,但同时也给数据库带来了可能泄露数据源物理路径的安全隐患,实际上并不是一种安全的做法。
万一给人拿到源程序,Access数据库的名字就一览无余了。
如果单纯从安全的角度考虑,建议在ODBC中设立数据源,再在程序中使用数据源名来打开数据库。
这样在ASP的程序文件中将不会直接涉及到数据库文件的物理路径,即使文件的源代码泄露,所能看到的也只是一个数据源的名称。
当然,这样是以牺牲程序的灵活性为代价的。
(3)使用Access来为数据库文件编码及加密。
首先在“工具→安全→加密/解密数据库”中选取数据库(如:
jobs.mdb),然后按确定,接着会出现“数据库加密后另存为”的窗口,可存为:
“jobs1.mdb”。
接下来为数据库加密,首先打开经过编码了的jobs1.mdb,在打开时,选择“独占”方式。
然后选取功能表的“工具→安全→设置数据库密码”,接着输入密码即可。
这样即使他人得到了jobs1.mdb文件,没有密码也是无法看到jobs1.mdb中的内容。
6SQL注入漏洞
注入漏洞在网上极为普遍,通常是由于程序员对注入不了解,或者程序过滤不严格,或者某个参数忘记检查导致。
SQL注入的原理,就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报。
防范技巧:
(1)程序设计时,最重要的是对客户端提交的变量参数进行严格的过滤检查。
(2)程序错误处理能力要设计周全、合理,避免泄露数据库相关信息。
一方面可以指定出错的页面,另一方面,可通过自定义函数来代替ASP中的Request函数,自行组织页面的出错提示,如:
FunctionSafeRequest(ParaName,ParaType)
'
---传入参数---
ParaName:
参数名称-字符型
ParaType:
参数类型-数值型(1表示以上参数是数值,0表示以上参数为字符)
DimParaValue
ParaValue=Request(ParaName)
IfParaType=1then
IfnotisNumeric(ParaValue)then
Response.write“参数”&
ParaName&
“必须为数值型!
”
Response.end
Endif
Else
ParaValue=replace(ParaValue,"
"
)
Endif
SafeRequest=ParaValue
Endfunction
7ASP木马
为什么程序被攻破后主机也随之被攻击者占据,原因就在于ASP木马。
它不是病毒,而是被放到Asp系统中的一个文件,常常难以找到。
如何防止ASP木马被上传到服务器呢?
如果Asp系统要支持文件上传,一点要设定好上传的文件格式,建议不要使用可更改的文件格式,直接从程序上锁定,一般图象文件格式,和压缩文件可以被上传就足够了。
可参考如下程序代码:
'
============程序开始==========
判断文件类型是否合格
PrivateFunctionCheckFileExt(fileEXT)
dimForumupload
Forumupload="
gif,jpg,bmp,jpeg"
Forumupload=split(Forumupload,"
fori=0toubound(Forumupload)
iflcase(fileEXT)=lcase(trim(Forumupload(i)))then
CheckFileExt=true
exitFunction
else
CheckFileExt=false
endif
next
EndFunction
验证文件内容的合法性
setMyFile=server.CreateObject("
Scripting.FileSystemObject"
setMyText=MyFile.OpenTextFile(sFile,1)'
读取文本文件
sTextAll=lcase(MyText.ReadAll):
MyText.close
判断用户文件中的危险操作
sStr="
8.getfolder.createfolder.deletefolder.createdirectory
.deletedirectory"
sStr=sStr&
.saveaswscript.shellscript.encode"
sNoString=split(sStr,"
fori=1tosNoString(0)
ifinstr(sTextAll,sNoString(i))0then
sFile=Upl.Path&
sFileSave:
fs.DeleteFilesFile
Response.write"
sFileSave&
文件中含有与操作目录等有关的命令"
_
"
mid(sNoString(i),2)&
为了安全原因,不能上传。
_"
Response.end
=============程序结束==============
把这段代码加到上传程序里做一次验证,那么上传程序安全性将会大大提高。
Web安全问题是一项非常庞大的系统工程,本文提及的不过是沧海一粟。
由于笔者的水平有限,一些相关理论未能深入地探讨和阐述,只是基于基本层面的一个综合研究,理论深度还有所欠缺,希望在今后的工作和学习的过程中可以继续在相关的领域中学习和发展。
参考文献:
[1]庞娅娟,孙明丽等.ASP技术方案宝典[M].北京:
人民邮电出版社,2008.
[2]张庆华.网络安全与黑客攻防宝典[M].北京:
电子工业出版社,2007.
[3]MikeShema.Web安全手册[M].北京:
清华大学出版社,2005.
[4](美)豪沃(Howard,M.),(美)勒伯兰克(LeBlanc,D.)等.软件安全相关的19个致命漏洞[M].北京:
清华大学出版社,2006.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ASP 页面 安全技术 相关 研究