收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1679|回复: 1

[asp] 分享上传文件过滤代码

[复制链接]
发表于 2010-5-21 12:37:49 | 显示全部楼层 |阅读模式
'作    用: 得到文件扩展名
'函数名: GetFileExt(fileTrue)
'参    数: sFileName 文件名
'返回值: 返回文件扩展名
  1. function GetFileExt(sFileName)
  2.      GetFileExt = UCase(Mid(sFileName,InStrRev (sFileName, ".")+1))'下面有附
  3. End function

  4. function GetExtendName(FileName)
  5. dim ExtName
  6. ExtName = LCase(FileName)
  7. ExtName = right(ExtName,3)
  8. ExtName = right(ExtName,3-Instr(ExtName,"."))
  9. GetExtendName = ExtName
  10. end Function
复制代码

'*******************************************************
'作    用: ASP上传漏洞 "\0" 防范
'函数名: TrueStr(fileTrue)
'参    数: sFileName 文件名
'返回值: 合法文件返回 True ,否则返回False
'*******************************************************
  1. function IsTrueFileName(sFileName)
  2.     dim str_len,pos
  3.     str_len=len(sFileName)
  4.     pos=Instr(sFileName,chr(0))
  5.     If pos=0 or pos=str_len then
  6.   IsTrueFileName = true
  7.     else
  8.   IsTrueFileName = false
  9.     End If
  10. End function
复制代码

'*******************************************************
'作    用: 检测上传的图片文件(jpeg,gif,bmp,png)是否真的为图片
'函数名: TrueStr(fileTrue)
'参    数: sFileName 文件名(此处文件名是文件夹的物理全路径)
'返回值: 确实为图片文件则返回 True ,否则返回False
'*******************************************************
  1. function IsImgFile(sFileName)
  2.     const adTypeBinary=1
  3.     dim return
  4.     dim jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
  5.     dim bmp(1):bmp(0)=CByte(&H42):bmp(1)=CByte(&H4D)
  6.     dim png(3):png(0)=CByte(&H89):png(1)=CByte(&H50):png(2)=CByte(&H4E):png(3)=CByte(&H47)
  7.     dim gif(5):gif(0)=CByte(&H47):gif(1)=CByte(&H49):gif(2)=CByte(&H46):gif(3)=CByte(&H39):gif(4)=CByte(&H38):gif(5)=CByte(&H61)
  8.     'on error resume next
  9.     return=false
  10.     dim fstream,fileExt,stamp,i
  11.     '得到文件后缀并转化为小写
  12.     FileExt = LCase(GetFileExt(sFileName))
  13.     '如果文件后缀为 jpg,jpeg,bmp,gif,png 中的任一种
  14.     '则执行真实图片判断
  15.   If instr(FileExt,"jpg|jpeg|bmp|gif|png")=true then
  16.   Set fstream=Server.createobject("ADODB.Stream")
  17.   fstream.Open
  18.   fstream.Type=adTypeBinary
  19.   fstream.LoadFromFile sFileName
  20.   fstream.position=0
  21.   select case LCase(FileExt)
  22.   case "jpg","jpeg"
  23. stamp=fstream.read(2)
  24. for i=0 to 1
  25.     If ascB(MidB(stamp,i+1,1))=jpg(i) then return=true else return=false
  26. next
  27.   case "gif"
  28. stamp=fstream.read(6)
  29. for i=0 to 5
  30.     If ascB(MidB(stamp,i+1,1))=gif(i) then return=true else return=false
  31. next
  32.   case "png"
  33. stamp=fstream.read(4)
  34. for i=0 to 3
  35.     If ascB(MidB(stamp,i+1,1))=png(i) then return=true else return=false
  36. next
  37.   case "bmp"
  38. stamp=fstream.read(2)
  39. for i=0 to 1
  40.     If ascB(MidB(stamp,i+1,1))=bmp(i) then return=true else return=false
  41. next
  42.   End select

  43.   fstream.Close
  44.   Set fseteam=nothing
  45.   If err.number<>0 then return = false
  46.     else
  47.   return = true
  48.     End If
  49.     IsImgFile = return
  50. End function
复制代码

'======================================================
  1. Function checkfilecontent(filename)
  2. set MyFile = server.CreateObject("Scripting.FileSystemObject")
  3. set MyText = MyFile.OpenTextFile(filename) '读取文本文件
  4. sTextAll = lcase(MyText.ReadAll())
  5. MyText.close
  6. set MyFile = nothing
  7. sStr=".getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|"
  8. sStr=sStr&".saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language="
  9. snum = split(sStr,"|")
  10. for i=0 to ubound(snum)
  11.      if instr(sTextAll,snum(i)) then
  12.        set filedel = server.CreateObject("Scripting.FileSystemObject")
  13.                    if filedel.FileExists(filename) then
  14.                                 filedel.DeleteFile(filename)
  15.                    end if
  16.        set filedel = Nothing
  17.        checkfilecontent = true
  18.      end if
  19. Next
  20. End function
复制代码

'*******************************************************
'作    用: 格式化显示文件大小
'FileSize: 文件大小
'*******************************************************
  1. Function FormatSize(FileSize)
  2.     If FileSize<1024 then FormatSize = FileSize & " Byte"
  3.     If FileSize/1024 <1024 And FileSize/1024 > 1 then
  4.   FileSize = FileSize/1024
  5.   FormatSize=round(FileSize*100)/100 & " KB"
  6.     Elseif FileSize/(1024*1024) > 1 Then
  7.   FileSize = FileSize/(1024*1024)
  8.   FormatSize = round(FileSize*100)/100 & " MB"
  9.     End If
  10. End function
复制代码

'*******************************************************
'作    用: 取得文件对应的图标
'函数名: FormatSize(FileSize)
'参    数: FileName 文件名
'返回值: 合法文件返回 True ,否则返回False
'*******************************************************
  1. Function GetFileIcon(FileName)
  2.     dim FileExt,Fso1
  3.     FileExt = GetFileExt(FileName)
  4.     ImgPath= strAdminRoot &    "Style/images/file/" & FileExt & ".gif"
  5.     Set Fso1 = Server.CreateObject("Scripting.FileSystemObject")
  6.     If Fso1.fileExists(server.MapPath(ImgPath))=true then
  7.   GetFileIcon= "<img src=""" & ImgPath & """>"
  8.     else
  9.   GetFileIcon= "<img src=""" & strAdminRoot & "Style/images/file/unknow.gif" & """>"
  10.     End If
  11.     Set Fso1=nothing
  12. End Function
复制代码


'*******************************************************
'作用:下载文件。
'函数名: DownFile(FileName)
' FileName
'*******************************************************
  1. Sub DownFile(FileName)
  2.   fname = server.MapPath(fname)
  3.   filename=split(fname,"\")
  4.    
  5.   Set objAdoStream=Server.createObject("ADODB.Stream")
  6.   objAdoStream.Type=1
  7.   objAdoStream.open()
  8.   objAdoStream.LoadFromFile(fname)
  9.   strchar=objAdoStream.Read()
  10.   fsize=objAdoStream.size
  11.   objAdoStream.Close()
  12.   Set objAdoStream=nothing  

  13.   Response.AddHeader "content-type","application/x-msdownload"
  14.   response.AddHeader "Content-Disposition","attachment;filename=" & filename(ubound(filename))
  15.   Response.AddHeader "content-length", fsize
  16.      
  17.   Response.BinaryWrite(strchar)
  18.   Response.Flush()
  19. End Sub
复制代码
发表于 2010-5-25 16:28:35 | 显示全部楼层
感觉太麻烦了,只用限制上传文件的扩展名即可,即使他将某个ASP文件改成.txt或者.jpg,就算他成功上传了,那也没用,因为.txt或.jpg根本就没有执行权限,何必要判断他是否真的是jpg或者text类型的文件呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-9-20 09:28 , Processed in 0.093514 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表