ASP网站漏洞解析及******防范方法

如何更好的达到防范******,本人提一下我的意见!

第一,免费程序不要真的就免费用,既然你能够共享原码,那么***者同样能够分析代码。若是在细节上注意防范,那样你站点的安全性就大大的提升了。即便出现了SQL Injection这样的漏洞,***者也不可能立刻拿下你的站点。

  因为ASP的方便易用,愈来愈多的网站后台程序都使用ASP脚本语言。可是,因为ASP自己存在一些安全漏洞,稍不当心就会给***提供可乘之机。事实上,安全不只是网管的事,编程人员也必须在某些安全细节上注意,养成良好的安全习惯,不然会给本身的网站带来巨大的安全隐患。目前,大多数网站上的ASP程序有这样那样的安全漏洞,但若是编写程序的时候注意一点的话,仍是能够避免的。


  1、用户名与口令被破解

  ***原理:用户名与口令,每每是***们最感兴趣的东西,若是被经过某种方式看到源代码,后果是严重的。

  防范技巧:涉及用户名与口令的程序最好封装在服务器端,尽可能少在ASP文件里出现,涉及与数据库链接的用户名与口令应给予最小的权限。出现次数多的用户名与口令能够写在一个位置比较隐蔽的包含文件中。若是涉及与数据库链接,在理想状态下只给它以执行存储过程的权限,千万不要直接给予该用户修改、插入、删除记录的权限。

  2、验证被绕过


  ***原理:如今须要通过验证的ASP程序大可能是在页面头部加一个判断语句,但这还不够,有可能被***绕过验证直接进入。

  防范技巧:须要通过验证的ASP页面,可跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。

  3inc文件泄露问题

  ***原理:当存在ASP的主页正在制做且没有进行最后调试完成之前,能够被某些搜索引擎机动追加为搜索对象。若是这时候有人利用搜索引擎对这些网页进行查找,会获得有关文件的定位,并能在浏览器中查看到数据库地点和结构的细节,并以此揭示完整的源代码。

   防范技巧:程序员应该在网页发布前对它进行完全的调试;安全专家则须要加固ASP文件以便外部的用户不能看到它们。首先对.inc文件内容进行加密,其 次也可使用.asp文件代替.inc文件使用户没法从浏览器直接观看文件的源代码。inc文件的文件名不要使用系统默认的或者有特殊含义容易被用户猜想到的名称,尽可能使用无规则的英文字母。

  4、自动备份被下载

  ***原理:在有些 编辑ASP程序的工具中,当建立或者修改一个ASP文件时,编辑器自动建立一个备份文件,好比:UltraEdit就会备份一个.bak文件,如你建立或 者修改了some.asp,编辑器会自动生成一个叫some.asp.bak文件,若是你没有删除这个bak文件,***者能够直接下载 some.asp.bak文件,这样some.asp的源程序就会被下载。

  防范技巧:上传程序以前要仔细检查,删除没必要要的文档。对以BAK为后缀的文件要特别当心。

  5、特殊字符

   ***原理:输入框是***利用的一个目标,他们能够经过输入脚本语言等对用户客户端形成损坏;若是该输入框涉及数据查询,他们会利用特殊查询语句,获得更多的数据库数据,甚至表的所有。所以必须对输入框进行过滤。但若是为了提升效率仅在客户端进行输入合法性检查,仍有可能被绕过。

  防范 技巧:在处理相似留言板、BBS等输入框的ASP程序中,最好屏蔽掉HTMLJavaScriptVBScript语句,如无特殊要求,能够限定只容许输入字母与数字,屏蔽掉特殊字符。同时对输入字符的长度进行限制。并且不但要在客户端进行输入合法性检查,同时要在服务器端程序中进行相似检查。
 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\Internet 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页中,咱们将非法的字符所有过滤掉,结果如何?咱们只在前面虚晃一枪,叫他们去改注册表吧,当他们改完才会发现,他们所作的都是那么的徒劳。

  8ASP***

  已经讲到这里了,再提醒各位论坛站长一句,当心大家的文件上传:为何论坛程序被攻破后主机也随之被***者占据。缘由就在……对!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”这两项都要更名或删除。呵呵,我能够大胆的说,国内可能近半以上的虚拟主机都没改过。只能庆幸大家的用户很合做,不然……我删,我删,我删删删……