当前位置: 首页 > news >正文

文件上传过滤

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<%

'先作一个文件名检验函数。过虑掉所有有危险的东西。
Function chkfileExt(savefilename)
feifaExt="html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|
ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis"
fExt = Split(feifaExt, "|")

For i = 0 To UBound(fExt)
If instr(savefilename,fExt(i))>0 Then '检测是否存在非法字符。
response.write("非法的文件格式!")
Response.End
End If
Next

End Function


set upload=new upload_file
if upload.form("act")="uploadfile" then

filepath=trim(upload.form("filepath"))
filelx=trim(upload.form("filelx"))
filepath=replace(filepath,chr(0),"")

'注意这里。替换掉chr(0)。该程序是把木马名称放在这里的。如果你只检验扩展名是没有用的。程序会传一个变量就是diy.asp&chr(0) 这个chr(0)是什么我不太清楚好像是一个停止符号。ASCII码表中对应的是“NUT”。大家可以试一下 response.write "abc.asp"&chr(0)&"03i320923.jpg" 显示的结果就是“abc.asp” 该程序就是通过这种办法绕过去的。


i=0
for each formName in upload.File
set file=upload.File(formName)

fileExt=lcase(file.FileExt) '得到的文件扩展名不含有.

if file.filesize>(1024*1024) then
response.write "<span style=""font-family: 宋体; font-size: 9pt"">最大只能上传 1M 的文件! [ <a href=# οnclick=history.go(-1)>重新上传</a> ]</span>"
response.end
end if


randomize
ranNum=int(90000*rnd)+10000
filename=filepath&year(now)&"_"&month(now)&"_"&day(now)&"_"&hour(now)&"_"&minute(now)&"_"&second(now)&"_"&ranNum&"."&fileExt

if file.FileSize>0 then

call chkfileExt(FileName)

'这里我们检验的是整个保存地址。如果存在非法字符就报警并停止。

file.SaveToFile Server.mappath(FileName)
response.write "<script>"
response.write "window.opener.document."&upload.form("FormName")&"."&upload.form("EditName")&".value='"&FileName&"';"
response.write "window.alert(""文件上传成功!请不要修改生成的链接地址!"");"
response.write "window.close();"
response.write "</script>"

end if

set file=nothing
next
set upload=nothing


end if
%>

相关文章:

  • 拦截器实现文件过滤(JSP)
  • LFI本地包含漏洞利用小技巧
  • MSSQL注入防范安全策略大全
  • NWebsec 1.0.3 The Security library for ASP.NET
  • 详细MSSQL注入语句
  • Microsoft IIS 短文件名/目录名 枚举漏洞
  • 如何更有效使用 Rational AppScan 扫描大型网站
  • Thinksns微博系统注入漏洞即后台拿webshell
  • PJBlog 3.2.9.518 getwebshell 漏洞
  • php5.4.3的远程代码执行漏洞,提权挺管用
  • DNS缓存中毒攻击与防护
  • Typecho导航栏上显示分类目录
  • 1分钟内保护你的Linux服务器—Server Shield v1.0.2
  • linux小技巧——添加永久生效的路由
  • nginx设置emlog伪静态
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • ES6核心特性
  • javascript 总结(常用工具类的封装)
  • JAVA多线程机制解析-volatilesynchronized
  • MaxCompute访问TableStore(OTS) 数据
  • Nodejs和JavaWeb协助开发
  • Odoo domain写法及运用
  • Rancher-k8s加速安装文档
  • Spring-boot 启动时碰到的错误
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Vultr 教程目录
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 排序(1):冒泡排序
  • 前嗅ForeSpider教程:创建模板
  • 如何合理的规划jvm性能调优
  • 入口文件开始,分析Vue源码实现
  • 延迟脚本的方式
  • 一个完整Java Web项目背后的密码
  • 1.Ext JS 建立web开发工程
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #HarmonyOS:Web组件的使用
  • (11)MATLAB PCA+SVM 人脸识别
  • (C语言)fgets与fputs函数详解
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)程序员疫苗:代码注入
  • (转载)Linux 多线程条件变量同步
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core 中的路径问题
  • .NET Standard 的管理策略
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET开发者必备的11款免费工具
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET是什么
  • @Bean, @Component, @Configuration简析
  • @SuppressLint(NewApi)和@TargetApi()的区别