如何解决ASP的上传漏洞

2019-07-23 08:29:48来源:爱站网 阅读 ()

新老客户大回馈,云服务器低至5折

相信大家在ASP编程中经常会听说ASP上传漏洞,那么很多人会好奇什么是ASP上传漏洞呢?其实ASP上传漏洞是将一些木马文件修改后缀名进行上传,那么我们现在就去看看如何解决ASP的上传漏洞的内容吧。
针对此情况使用下列函数进行辨别:

复制代码 代码如下:

<%
'******************************************************************
'CheckFileType?函数用来检查文件是否为图片文件
'参数filename是本地文件的路径
'如果是文件jpeg,gif,bmp,png图片中的一种,函数返回true,否则返回false
'******************************************************************

const?adTypeBinary=1

dim?jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
dim?bmp(1):bmp(0)=CByte(&H42):bmp(1)=CByte(&H4D)
dim?png(3):png(0)=CByte(&H89):png(1)=CByte(&H50):png(2)=CByte(&H4E):png(3)=CByte(&H47)
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)

function?CheckFileType(filename)
on?error?resume?next
CheckFileType=false
dim?fstream,fileExt,stamp,i
fileExt=mid(filename,InStrRev(filename,".")+1)
set?fstream=Server.createobject("ADODB.Stream")
fstream.Open
fstream.Type=adTypeBinary
fstream.LoadFromFile?filename
fstream.position=0
select?case?fileExt
case?"jpg","jpeg"
stamp=fstream.read(2)
for?i=0?to?1
if?ascB(MidB(stamp,i+1,1))=jpg(i)?then?CheckFileType=true?else?CheckFileType=false
next
case?"gif"
stamp=fstream.read(6)
for?i=0?to?5
if?ascB(MidB(stamp,i+1,1))=gif(i)?then?CheckFileType=true?else?CheckFileType=false
next
case?"png"
stamp=fstream.read(4)
for?i=0?to?3
if?ascB(MidB(stamp,i+1,1))=png(i)?then?CheckFileType=true?else?CheckFileType=false
next
case?"bmp"
stamp=fstream.read(2)
for?i=0?to?1
if?ascB(MidB(stamp,i+1,1))=bmp(i)?then?CheckFileType=true?else?CheckFileType=false
next
end?select
fstream.Close
set?fseteam=nothing
if?err.number<>0?then?CheckFileType=false
end?function
%>


那么在应用的时候?

?

复制代码 代码如下:

?

CheckFileType(server.mappath("cnbruce.jpg"))?
或者?
CheckFileType("F:/web/164/images/cnbruce.jpg"))?

反正即是检测验证本地物理地址的图像文件类型,返回?true?或?false值
所以这个情况应用在图像上传中,目前的办法是先允许该“伪图像”文件的上传,接着使用以上的自定义函数判断该文件是否符合图像的规范,若是木马伪装的图像文件则FSO删除之,比如:

复制代码 代码如下:
file.SaveAs?Server.mappath(filename)???'保存文件?
If?not?CheckFileType(Server.mappath(filename))?then?
????response.write?"错误的图像格式"?
????Set?fso?=?CreateObject("Scripting.FileSystemObject")?
????Set?ficn?=?fso.GetFile(Server.mappath(filename))?
????ficn.delete?
????set?ficn=nothing?
????set?fso=nothing?
????response.end?
end?if?

则是先将文件上传,接着立马使用自定义函数判断文件图像类型的吻合性,FSO做出删除该文件的操作。
ASP上传漏洞还利用"\0"对filepath进行手脚操作
http://www.cnbruce.com/blog/showlog.asp?cat_id=32&log_id=635?
针对这样的情况可使用如下函数

复制代码 代码如下:
function?TrueStr(fileTrue)?
?str_len=len(fileTrue)?
?pos=Instr(fileTrue,chr(0))?
?if?pos=0?or?pos=str_len?then?
????TrueStr=true?
?else?
????TrueStr=false?
?end?if?
end?function?

接着就可判断后再做文件的上传

复制代码 代码如下:
if?TrueStr(filename)=false?then?
????response.write?"非法文件"?
????response.end?
end?if?
file.SaveAs?Server.mappath(filename)?

看完本文后相信大家对如何解决ASP的上传漏洞有了一定的了解吧,了解这个知识对我们的学习或工作有一定的帮助哦。


原文链接:https://js.aizhan.com/develop/asp/7663.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:快速生成文件的方法

下一篇:asp之字符串操作函数