6、数据库下载漏洞
攻击原理:在用access做后台数据库时,如果有人通过各种方法知道或者猜到了服务器的access数据库的路径和数据库名称,那么他也能够下载这个access数据库文件,这是非常危险的。
防范技巧:
(1)为你的数据库文件名称起个复杂的非常规的名字,并把它放在几层目录下。所谓 “非常规”, 打个比方说,比如有个数据库要保存的是有关书籍的信息, 可不要给它起个“book.mdb”的名字,而要起个怪怪的名称,比如d34ksfslf.mdb, 并把它放在如./kdslf/i44/studi/的几层目录下,这样黑客要想通过猜的方式得到你的access数据库文件就难上加难了。
(2)不要把数据库名写在程序中。有些人喜欢把dsn写在程序中,比如:
dbpath = server.mappath(“cmddb.mdb”)
conn.open “driver={microsoft access driver (*.mdb)};dbq=” & dbpath
假如万一给人拿到了源程序,你的access数据库的名字就一览无余了。因此建议你在odbc里设置数据源,再在程序中这样写:
conn.open“shujiyuan”
(3)使用access来为数据库文件编码及加密。首先在“工具→安全→加密/解密数据库”中选取数据库(如:employer.mdb),然后按确定,接着会出现“数据库加密后另存为”的窗口,可存为:“employer1.mdb”。
要注意的是,以上的动作并不是对数据库设置密码,而只是对数据库文件加以编码,目的是为了防止他人使用别的工具来查看数据库文件的内容。
接下来我们为数据库加密,首先打开经过编码了的 employer1.mdb,在打开时,选择“独占”方式。然后选取功能表的“工具→安全→设置数据库密码”,接着输入密码即可。这样即使他人得到了employer1.mdb文件,没有密码他也是无法看到 employer1.mdb中的内容。
7、防范远程注入攻击
这类攻击在以前应该是比较常见的攻击方式,比如post攻击,攻击者可以随便的改变要提交的数据值已达到攻击目的.又如:cookies 的伪造,这一点更值得引起程序编写者或站长的注意,不要使用cookies来做为用户验证的方式,否则你和把钥匙留给贼是同一个道理.
比如:
if trim(request. cookies ("uname"))="fqy" and request.cookies("upwd") =”fqy#e3i5.com” then
……..more………
end if
我想各位站长或者是喜好写程序的朋友千万别出这类错误,真的是不可饶恕.伪造cookies 都多少年了,你还用这样的就不能怪别人跑你的密码.涉及到用户密码或者是用户登陆时,你最好使用session 它才是最安全的.如果要使用cookies就在你的cookies上多加一个信息,sessionid,它的随机值是64位的,要猜解它,不可能.例:
if not (rs.bof or rs.eof) then
login="true"
session("username"&sessionid) = username
session("password"& sessionid) = password
‘response.cookies(“username”)= username
‘response.cookies(“password”)= password
下面我们来谈谈如何防范远程注入攻击,一般的攻击都是将单表提交文件拖到本地,将form action=”chk.asp” 指向你服务器中处理数据的文件即可.如果你全部的数据过滤都在单表页上,那么恭喜你,你将已经被脚本攻击了.
怎么才能制止这样的远程攻击?好办,请看代码如下: 程序体(9)
<%
server_v1=cstr(request.servervariables("http_referer"))
server_v2=cstr(request.servervariables("server_name"))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<br><br><center>"
response.write " "
response.write "你提交的路径有误,禁止从站点外部提交数据请不要乱改参数!"
response.write "
"
response.end
end if
%>
‘个人感觉上面的代码过滤不是很好,有一些外部提交竟然还能堂堂正正的进来,于是再写一个.
‘这个是过滤效果很好,建议使用.
if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then response.write "处理 url 时服务器上出错。
如果您是在用任何手段攻击服务器,那你应该庆幸,你的所有操作已经被服务器记录,我们会第一时间通知公安局与国家安全部门来调查你的ip. "
response.end
end if
程序体(9)
本以为这样就万事大吉了,在表格页上加一些限制,比如maxlength啦,等等..但天公就是那么不作美,你越怕什么他越来什么.你别忘了,攻击者可以突破sql注入攻击时输入框长度的限制.写一个socket程序改变http_referer?我不会。网上发表了这样一篇文章:
------------len.reg-----------------
windows registry editor version 5.00
[hkey_current_user\software\microsoft\inte.net explorer\menuext\扩展(&e)]
@="c:\documents and settings\administrator\桌面\len.htm"
"contexts"=dword:00000004
-----------end----------------------
-----------len.htm------------------
----------end-----------------------
用法:先把len.reg导入注册表(注意文件路径)
然后把len.htm拷到注册表中指定的地方.
打开网页,光标放在要改变长度的输入框上点右键,看多了一个叫扩展的选项了吧
单击搞定! 后记:同样的也就可以对付那些限制输入内容的脚本了.
怎么办?我们的限制被饶过了,所有的努力都白费了?不,举起你de键盘,说不。让我们继续回到脚本字符的过滤吧,他们所进行的注入无非就是进行脚本攻击。我们把所有的精力全都用到action以后的页面吧,在chk.asp页中,我们将非法的字符全部过滤掉,结果如何?我们只在前面虚晃一枪,叫他们去改注册表吧,当他们改完才会发现,他们所做的都是那么的徒劳。
8、asp木马
已经讲到这里了,再提醒各位论坛站长一句,小心你们的文件上传:为什么论坛程序被攻破后主机也随之被攻击者占据。原因就在……对!asp木马!一个绝对可恶的东西。病毒么?非也.把个文件随便放到你论坛的程序中,您老找去吧。不吐血才怪哦。如何才能防止asp木马被上传到服务器呢?方法很简单,如果你的论坛支持文件上传,请设定好你要上传的文件格式,我不赞成使用可更改的文件格式,直接从程序上锁定,只有图象文件格式,和压缩文件就完全可以,多给自己留点方便也就多给攻击者留点方便。怎么判断格式,我这里收集了一个,也改出了一个,大家可以看一下:
程序体(10)
’判断文件类型是否合格
private function checkfileext (fileext)
dim forumupload
forumupload="gif,jpg,bmp,jpeg"
forumupload=split(forumupload,",")
for i=0 to ubound(forumupload)
if lcase(fileext)=lcase(trim(forumupload(i))) then
checkfileext=true
exit function
else
checkfileext=false
end if
next
end function
‘验证文件内容的合法性
set myfile = server.createobject ("scripting.filesystemobject")
set mytext = myfile.opentextfile (sfile, 1) ’ 读取文本文件
stextall = lcase(mytext.readall): mytext.close
’判断用户文件中的危险操作
sstr ="8 .getfolder .createfolder .deletefolder .createdirectory
.deletedirectory"
sstr = sstr & " .saveas wscript.shell script.encode"
snostring = split(sstr," ")
for i = 1 to snostring(0)
if instr(stextall, snostring(i)) <> 0 then
sfile = upl.path & sfilesave: fs.deletefile sfile
response.write "<center><br><big>"& sfilesave &"文件中含有与操作目录等有关的命令"&_
"<br><font color=red>"& mid(snostring(i),2) &"</font>,为了安全原因,<b>不能上传。<b>"&_"</big></center></html>"
response.end
end if
next
把他们加到你的上传程序里做一次验证,那么你的上传程序安全性将会大大提高.
什么?你还不放心?拿出杀手锏,请你的虚拟主机服务商来帮忙吧。登陆到服务器,将prog id 中的"shell.application"项和"shell.application.1"项改名或删除。再将”wscript.shell”项和”wscript.shell.1”这两项都要改名或删除。呵呵,我可以大胆的说,国内可能近半以上的虚拟主机都没改过。只能庆幸你们的用户很合作,否则……我删,我删,我删删删……
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器