--------------------------------------------------------------------------------
3.等待Webboy的补丁,我这里先写一段代码让大家先凑合着用:
'删除无用的上传文件
if ObjInstalled=True and Uploadfiles<>"" then
dim fso,strRubbishFile
Set fso = Server.Create
Object("Scripting.FileSystem
Object")
if instr(Uploadfiles,"|")>1 then
dim arrUploadfiles,intTemp
arrUploadfiles=split(Uploadfiles,"|")
Uploadfiles=""
for intTemp=0 to ubound(arrUploadfiles)
if instr(Content,arrUploadfiles(intTemp))<=0 and arrUploadfiles(intTemp)<>DefaultPicUrl then
if ucase(left(arrUploadfiles(intTemp),len(SaveUpFilesPath)))<>ucase(SaveUpFilesPath) or instr(arrUploadfiles(intTemp),"../")>0 then
response.write "
" & arrUploadfiles(intTemp) & "包含非法字符,已被清除!"
Uploadfiles=""
else
strRubbishFile=server.MapPath(arrUploadfiles(intTemp))
if fso.FileExists(strRubbishFile) then
fso.DeleteFile(strRubbishFile)
response.write "
" & arrUploadfiles(intTemp) & "在文章中没有用到,也没有被设为首页图片,所以已经被删除!"
end if
end if
else
if intTemp=0 then
Uploadfiles=arrUploadfiles(intTemp)
else
Uploadfiles=Uploadfiles & "|" & arrUploadfiles(intTemp)
end if
end if
next
else
if instr(Content,Uploadfiles)<=0 and Uploadfiles<>DefaultPicUrl then
if ucase(left(Uploadfiles,len(SaveUpFilesPath)))<>ucase(SaveUpFilesPath) or instr(Uploadfiles,"../")>0 then
response.write "
" & Uploadfiles & "包含非法字符,已被清除!"
Uploadfiles=""
else
strRubbishFile=server.MapPath(Uploadfiles)
if fso.FileExists(strRubbishFile) then
fso.DeleteFile(strRubbishFile)
response.write "
" & Uploadfiles & "在文章中没有用到,也没有被设为首页图片,所以已经被删除!"
end if
Uploadfiles=""
end if
end if
set fso=nothing
end If
'结束
4.其实以上的方法都不能从根本上解决这个漏洞,最好的方式就是换一种方式编程来实现“删除没有用到的文件”这一功能,比如采用Session来记录上传文件名等等。
目前动力文章系统是使用范围最广的免费代码之一,并且有好多系统模仿了动力系统的这一功能(比如我,呵呵)。利用该漏洞是十分狠毒的,真正的损人不利己,因为被这样删除的文件可不是能在“回收站”中找回来的!公开这个漏洞的目的只是希望每个程序员在编写脚本的时候能够多想想安全,不要出现类似的问题。