-
2017-07-30 15:40:06
1 我在服务端接收表单post数据时,已经设置了request和response的charset,
而且用 org.apache.commons.fileupload.FileItem的getString方法做了utf-8转换之后才真正使用这些表单提交数据。然而在上传文件时,
总是导致上传成功的文件名中文乱码,而且数据库中相应的文件名也是乱码。更诡异的是,我在本机测试怎么都正常,
使用内网地址192.168.1.57来假装成外网ip也没问题。最后仔细分析程序,发现我在调用FileItem的getString方法之后,使用提交数据之前,又用
new String(devInfo.getBytes(), "utf-8")做了一次utf-8转换,删掉这一句之后,服务器端立马正常了。看来是粗心大意导致的,特此记录,以备后参
更多相关内容 -
Hadoop通过WEB上传文件到HDFS失败
2021-12-15 10:10:15没想到WEB也需要知道内部的主机名,不科学啊……(零)问题
之前在写:🔗《从零开始学习大数据平台(Episode 1)》时,搭建了测试的大数据平台。
那时候用WEB上传文件到HDFS是正常的。
最近又用了一下,发现WEB不能上传文件了,浏览器中报错:Couldn’t upload the file xxxx.yyy
大概如下图:
(一)可能的原因:目录权限
如上图,HDFS中创建目录的时候,仅用户自己有写权限。
通过命令创建的文件夹,属于Linux当前用户的,比如例子里是ac。
通过WEB创建的文件夹,属于dr.who。所以修改了一个目录的权限,让本组和其他人有写权限。
$ac@vm00 ~> hdfs dfs -chmod +w /thePathName
再尝试上传文件依然失败。
看来不是这个原因💔……🚦 文件/目录权限是否开启,需要配置:
$ vim hdfs-site.xml
如果下面配置是false则文件目录可以随意访问。
<configuration> ... <property> <!--测试环境可以把dfs文件权限关闭(便于不同用户访问)--> <name>dfs.permissions</name> <value>true</value> </property> ... </configuration>
(二)可能的原因:域名解析
按F12打开浏览器的调试窗口,看到这么一句:
这才想起,之前成功都是用服务器自己浏览器在访问,hosts文件中有各个虚拟机的主机名和IP对应。
这次用的是别的机器,用IP地址直接访问的HDSF的WEB界面。http://192.168.168.121:9870/explorer.html
没想到它内部还是用的配置中的主机名……
也就是说,如果想用WEB上传文件,那么浏览器所在的计算机,必须知道HDFS各个节点的主机名。遂修改hosts加入:
192.168.168.121 vm00 192.168.168.122 vm01 192.168.168.123 vm02 192.168.168.124 vm10 192.168.168.125 vm11 ... #等等 ...
然后执行命令让它立即生效(否者重启后才生效):
C:\> ipconfig /flushdns
上传成功! 🆗 👌 😄 💟
-
c++实现向web服务器上传文件
2018-01-04 21:46:21vs2013 c++实现上传的客户端,服务端为java写的web工程,模拟post方法,可以上传大文件 -
批量上传 断点续传 文件夹上传 web上传 页面上显示显示本地电脑文件夹信息 多种上传途径
2010-07-01 10:49:301、批量上传 断点续传 web上传 页面上显示显示本地电脑文件夹信息 多种上传方式 可控制上传文件的格式和大小 2、可以直接选择文件夹上传,上传到服务器后,可以根据文件夹的目录结构重新建立文件夹结构 3、显示... -
Web—文件上传
2022-02-21 16:27:35概念:文件上传攻击是指攻击者利用Web应用对上传文件过滤不严的漏洞,将应用程序定义类型范围之外的文件上传到Web服务器,并且此类文件通常为木马,在上传成功后攻击者即可获得当前文件的webshell。 攻击者的目标是...文章目录
一、文件上传
概念:文件上传攻击是指攻击者利用Web应用对上传文件过滤不严的漏洞,将应用程序定义类型范围之外的文件上传到Web服务器,并且此类文件通常为木马,在上传成功后攻击者即可获得当前文件的webshell。
攻击者的目标是取得当前Web服务器的权限,如果通过Web层面展开攻击,那必须将攻击者的木马插入到Web系统中,并在服务器端执行,这个过程就是对Web服务器进行文件注入攻击。
1、上传攻击的原理
假设目标服务器为用PHP语言构建的Web系统,那么针对上传点就要利用PHP木马,并且要求在木马服务器以后缀名为.php进行保存,因此上传木马的过程就是在Web系统中新增一个页面,当木马上传成功后,攻击者就可以远程访问这个木马文件,也就相当于浏览一个页面,只不过这个页面就是木马,具备读取、修改文件内容、连接数据库等功能。
上传漏洞存在的前提是:存在上传点且上传点用户可以独立控制上传内容,同时上传文件可被顺利解析。2、上传的标准业务流程
整个过程可分为三大步骤:
- 客户端上传功能
- 中间文件上传功能
接收客户端提交的HTML表单
将表单内容存储为临时文件
根据安全规范,将临时文件保存为正式文件 - 服务器存储及调用
客户端上传表单基本通过HTML格式中的 < from > 实现
from action定义了表单上传目标界面为upload_file.php,采用提交的方式由method定义,值为post,定义提交的lexicon为multipart/from-data(如果不指定由浏览器自行判断)<form action="upload_file.php" method="post" enctype="multipart/form-data">
3、上传攻击的条件
攻击者利用上传功能的目的是将Web木马上传至服务器并能成功执行,也难辞,攻击者成功实施文件上传攻击并获得服务器Webshell的前提条件如下所示:
- 目标网站具有上传功能
- 上传的目标文件能够被Web服务器解析执行
- 知道文件上传到服务器后的存放路径和文件名称
- 目标文件可被用户访问
二、上传检测绕过技术
1、客户端JavaScript检测及绕过
1.1 防护思路
如果用户上传文件名非法,则不允许通过,如果合法则正常执行上传流程。简称JS防护。
在网站部署JavaScript脚本,Js脚本会对用户表单提交的数据进行检查,如果发现非法后缀,如.php,.jsp等,则直接终止上传。1.2 绕过方式
- 浏览器可以通过禁用JS方式,禁止防护脚本执行,导致防护功能直接失效。
- 如果这种防护手段在HTTP数据包发出之前执行完毕,那攻击者可使用Web代理类攻击,抓取含有上传表单的HTTP数据包,并在包中修改为预想的后缀,如.php。
- 直接删除代码里onsubmit事件中关于上传时验证文件的相关代码。
onsubmit事件:将用户上传的后缀名提交到lastname函数中进行后缀名匹配测试。 - 伪造后缀绕过JS检查
采用JS进行过滤的防护方式的初衷时减少服务器的性能消耗,同时实现防护功能。
缺陷是:服务器要相信用户浏览器提价到西悉尼正确,由于检测是在客户端进行的,所以会存在很大的安全隐患,如用户随意修改本地信息及配置,当值防护手段失效,且绕过手段较为成熟。2、服务器端MIME检测及绕过
2.1 防护思路
在HTTP协议中,会利用Content-Type表示本次上传的内容类型,如图片格式文件Content-Type的值为image/jpg、image/gif、image/png。服务器接收到HTTP包后,会先判断Content-Type是否合法,默认情况下,Content-Type由浏览器自动生成,并且在HTTP包的文件头进行传输。
2.2 绕过方式
HTTP 抓包后修改Content-type的值,可利用BurpSuite进行抓包。
总体来说MIME在服务器端检测,比JS在客户端检测效果略好一点,但由于Content-Tpye类型依然由客户端浏览器生成,因此实际上MIME还是处于用户可控状态(修改文件头,修改Content-Type等均可),因此MIME的防护效果依然较差。
3、服务端文件扩展名检测及绕过
根据以上描述,只能在服务器端进行全面检查,且不能信赖由服务器浏览器生成并提交的数据,有效的防护思路为:
- 当服务器接收到上传信息后,校验文件名是否合法。
- 完全不信来用户所上次文件的后缀名,在用户上传文件之后,重新给文件添加用户名。
3.1 防护思路
主要通过文件后缀名黑/白名单过滤,服务器采用针对文件名的黑/白名单检测机制。
上传时,在转存过程中利用预先设定的会缀名保存文件来避免非法后缀名的问题。
但从防护效果来看,白名单效果好于黑名单,但在实际应用中,白名单由于防护过严,常常无法满足实际业务需要。总结,推荐以下几种手段:
- 文件后缀名重命名
- 白名单过滤
- 黑名单过滤
$deny_ext=array('.php'); //黑名单后缀名(举例) $file_ext=strrchr($_FILES['upfile']['name'],'.'); //获取后缀名 if(!in_array($file_ext,$deny_ext)){ //对比 ...... }
3.2 绕过方式
尝试未被过滤的文件名,利用截断漏洞等实现木马上传。
绕过思路为:构造非限制条件,以欺骗服务器,从而达到绕过的行为。针对黑名单:
- 多重测试过滤文件名
如:直接上传php文件,会报类型错误,尝试用php5后缀。 - 判断是否存在大小写绕过
中间件会区分文件大小写,但操作系统并不会区分后缀名大小写。 - 特殊文件名构造(Windows下)
可用Burpsuite代理劫持HTTP包,并手动在相关字段出添加“_”下划线,由于Windows不识别上述后缀机制,会自动去掉“ _ ”、“ . ”等符号,从而使攻击者可绕过黑名单防护规则。 - %00截断
当C语言在执行过程中遇到%00,会被当做终止符,因此程序会自动截断后续信息。如:shell.php .jpg(注意.jpg前有空格)。
针对白名单:
- 特殊文件构造(参考黑名单防护)
- 0x00截断(参考黑名单防护)
4、服务器端文件内容检测及绕过
4.1 防护思路
- 通过检测上传文件的文件头判断当前文件格式
读取文件开题部分的数个字节,判断文件头与文件类型是否匹配,通常情况下,通过判断前10个字节基本上就能判断出一个文件的真实类型。 - 调用API或函数对文件进行加载测试,常见的使图像二次渲染
关键函数imagrcreatefromjpeg从jpeg生成新的图片,这也就导致在二次渲染的过程中,插入的木马无法被渲染成像素,在渲染过程中被丢弃,导致木马执行失效,针对图像二次渲染会给服务器带来额外的性能开销。 - 检测上传文件是否为图像文件内容
可利用php中的getimagesize()函数实现,获取目标图片的高度宽度像素值,再与本地获取到的图片信息进行比对,如果相同则保存。
4.2 绕过方式
- 文件头检测
修改文件头,对前二十字节进行替换,后面再插入一句话木马,即可实现对文件内容检测的绕过。 - 文件二次渲染(极难)
基于数据二义性,即让数据即是图像数据也包含一句话木马
对文件加载器进行溢出攻击
三、上传流程安全防护总结
攻击者利用上传漏洞的主要目标是:
- 上传木马
- 让木马按照Web格式进行解析
在防护手段可用的思路有:
- 限制高位扩展名上传
利用黑名单确定后缀名是否合法
根据应用特点重新对上传文件进行后缀名重命名 - 显示高危文件内容出现
利用内容检索来检测是否存在非正常内容
确认图片格式与上传文件内容是否对应
在图像加载时重新渲染,避免非图像内容出现
-
python web 上传文件
2019-07-12 09:41:08python上传文件 一、.写html文件(文件名为upfile.html) 上传文件 {% csrf_token %} 说明: 1、表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况...python上传文件
一、.写html文件(文件名为upfile.html)”
<meta charset="UTF-8"> <title>上传文件</title>
<form action="/savefile/" method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="file"/> <input type="submit" value="上传"/> </form>
说明:
1、表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
2、{% csrf_token %}用于防止禁止访问
3、method="post"文件上传的方式必须为POST方式
4、type="file"类型为文件域二、、在myApp/url.py中配置url
url(r'upfile/$', views.upfile), url(r'savefile/$', views.savefile),
三、在myApp/views.py文件中定义视图
def upfile(request):
return render(request, 'myApp/upfile.html')
import os
from django.conf import settings
def savefile(request):
if request.method == 'POST': f = request.FILES['file']#upfile的html文件中命名的名字 #合成文件在服务器端存储的路径 filePath = os.path.join(settings.MEDIA_ROOT, f.name) with open(filePath, 'wb') as fp: for info in f.chunks():#因为文件f的大小并不确定,所以要调用f.chunks()的方法来以文件流的方式一段一段的接收 fp.write(info) return HttpResponse("上传成功") else: return HttpResponse("上传失败")
-
web上传图片到七牛云服务器
2016-10-12 14:11:31本文通过java web的使用,把要上传的图片通过浏览器上传到服务器上面. ` 文本仅供参考,可能出现很多不合理;` 1 创建对应的jsp页面: 下面是jsp下面的对应的from表单,上传文件用的那么ImgFiles的属性名称,同样你可以... -
web文件上传
2018-07-12 10:38:39这个Demo 解决了Web上传问题中的以下问题: 1.实现web开发中的文件上传功能,需要完成2个步骤操作: ①在web页面中添加上传输入项 ②在servlet中读取上传文件的数据,并保存到本地盘中。 如何在web页面中添加上传输入... -
文件上传原理:Web上传文件的原理及实现
2013-11-15 22:09:00现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload、还有Struts1.x... 虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理,对于处理突然出现的问题会有很... -
Web安全—文件上传漏洞
2022-02-06 14:12:21漏洞简介:文件上传漏洞是Web安全中对数据与代码分离原理的一种攻击方法,顾名思义,攻击者上传了一个可执行文件(木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 漏洞危害: ... -
.NET webapi实现文件上传功能
2018-01-06 11:35:40ASP.NET 在WEBAPI中开发文件上传功能。以及MVC中如何调用 -
web上传整个文件夹
2019-08-21 15:01:40在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所有浏览器。 支持文件批量... -
web文件上传-0x00漏洞
2021-12-28 17:07:00题目:2016全国大学生信息安全竞赛-web文件上传 原理 0x00漏洞:也称为%00阻断漏洞,0x00漏洞常见于Apache服务器后缀名称解析漏洞,不管文件最后后缀为什么,只要是.php.*结尾,就会被Apache服务器解析成php文件,... -
七牛云 Java Web上传图片
2017-06-20 23:49:36本文由黑壳网原创本文来源七牛云 Java Web上传图片 - 黑壳网壳叔搞笑一刻没有对手警官抓到正在赌博的四个人。“你们知道这是犯法的吗?”警官向第一个人怒吼道。 “不,我只是在这里看看。” 警官又问第二个人:... -
CG CTF WEB 上传绕过
2019-07-04 18:43:08http://teamxlc.sinaapp.com/web5/21232f297a57a5a743894a0e4a801fc3/index.html 题解: 原理: 00截断是文件后缀名就一个%00字节,可以截断某些函数对文件名的判断,在许多语言函数中,处理字符串的函数中0x00被... -
调用WebApi接口上传文件
2016-06-25 15:55:01.NetMvc调用WebApi接口进行上传文件 -
Hadoop HDFS 文件访问权限问题导致Java Web 上传文件到Hadoop失败的原因分析及解决方法
2014-05-10 21:03:32Eclipse中开发Java Web程序,使用Hadoop-Core JAR包中的Java API,上传文件到Hadoop HDFS文件系统中,上传提示成功,但是在Hadoop集群中通过“hadoop fs –ls /xxx”命令却无法查看到相应的上传文件。 2.... -
Web安全 文件上传漏洞的 测试和利用.(上传一个图片或文件 拿下服务器最高权限.)
2022-02-13 18:05:16现在大多的网站和Web应用系统都会有上传功能(比如:文档,图片,头像,视频上传等.),而程序员在开发文件上传功能时,没有对代码做严格校验上传文件的后缀和文件类型. 此时攻击者就可以上传一个与网站脚本语言相... -
Web实现文件上传和下载
2020-05-17 19:59:17要实现Web开发中的文件上传功能,通常需要完成两步操作:一是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。 由于大多数文件的上传都是通过表单的形式提交给服务器的,因此... -
web端利用腾讯云点播接口上传视频
2019-09-26 10:20:41腾讯云web上传文件文档 https://cloud.tencent.com/document/product/266/9239#.E5.B8.B8.E8.A7.81.E9.97.AE.E9.A2.98 sdk:https://github.com/tencentyun/vod-js-sdk-v6 根据文档下载sdk或参考sdk即可 前端源... -
web大文件上传解决方案
2019-08-16 09:53:17众所皆知,web上传大文件,一直是一个痛。上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的。 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路。 实现文件夹上传,... -
web前端js上传文件
2019-06-23 16:19:00前端用的js+easyui Demo: <html> <head> <meta charset="UTF-8"> <...XMLHttpRequest上传文件</title> <script type="text/javascript"> //图片上传 var xh... -
Java Web中上传图片以及显示图片的方法
2021-08-02 21:42:26Java Web中上传图片以及显示图片的方法,用文字和图片相结合的方式清晰地讲解了 -
Web安全之文件上传
2020-09-26 15:13:19现在很多web应用程序中允许上传图片,文本或者其他资源到指定的位置,文件上传漏洞就是利用这些可以上传的地方将恶意代码植入到服务器中,然后通过url去访问以执行代码。 防范措施 对于上传文件的后缀名(扩展名)... -
java web上传文件,普通表单和文件名乱码问题
2014-03-22 22:10:56项目中用到文件上传。form提交,如果enctype="multipart/form-data",会发现文件名或者普通表单字段乱码 大家一般解决文件名称乱码比较容易,如以下设置 FileItemFactory factory = new DiskFileItemFactory(); ... -
web上传图片的方式之一base64编码上传图片java后台接收
2018-02-08 15:59:52web上传图片的方式之一base64编码字符串上传前台传以data:image/jpeg;base64,开头的base64编码的String字符串,后台接收字符串以后先进行base64解码 .decodeBuffer(),转换成二进制编码,然后使用字节输出流... -
web入门 文件上传
2022-04-13 23:39:48同样的提示说后端检验要严密,访问url/upload,发现可以访问,也即该目录下存在一个php文件,可以利用.user.ini文件上传,该文件只有在有php文件的时候才生效 百度搜索查看到该文件的可配置项有auto_append_file、a -
asp.net mvc 4 web api 上传文件
2015-11-17 15:46:18asp.net mvc 4 web api 上传文件 -
Webupload大文件分片上传源码
2016-11-26 18:40:39本实例不包含JAR包,如果要运行代码,请自行搭建可运行的web环境,提供webupload前端的完成代码。后台采取简易的springMVC实现分片合并操作。webupload的详细步骤参考博客地址:... -
web项目中的文件上传之用户头像上传简单实现
2020-03-26 20:14:19首先要在需要上传的from表单上添加 enctype=“multipart/form-data”,这个标明该from表单是分块提交的东东;而且提交方法必须是post,action是路径提交到那个servlet,方法名隐藏域是为了找servlet上的action=...