文件上传通过多部分/表单数据POST请求实现。通常这是使用客户端AJAX完成的,但IE9不支持FileAPI(http://www.w3.org/TR/FileAPI/).
IE9的解决方法是在隐藏的iframe中创建一个表单,并提交表单。CSRF令牌通过将其作为表单输入添加到请求正文中——原因是我无法在表单提交之前操作请求标头以添加CSRF标头。
Spring Security的组织。springframework。安全网状物csrf。CsrfFilter首先尝试从头中获取CSRF令牌,如果找不到,则尝试从参数中获取(通过HttpServletRequest.getParameter())
这不适用于正文中带有CSRF标记的多部分请求——getParameter()将始终返回null。
(另一方面,对getParameter()的调用也会将请求InputStream读取到底,因此我们必须在请求到达CsrfFilter之前对其进行包装,以便将请求InputStream“缓存”)
我想创建一个调用getPart()的CsrfFilter,但在仍然使用漂亮的clean Spring SecurityXML命名空间元素的情况下无法这样做。
原因是没有地方在配置中包含自定义CSRF过滤器——并且CsrfConfigrer被硬编码为使用org.springframework.security.web.csrf.CsrfFilter,因此无法注入。
我可以将代码添加到请求包装器类的重写getParameter()方法中,以尝试从多部分请求中解析参数——但实际上,这很难做到正确,并且宁愿避免此类维护成本。
欢迎提供任何帮助,无论是在客户端还是服务器端修复建议!
TIA公司
我已经实现了一个解决方案,现在似乎正在发挥作用,但有一些东西我真的不喜欢。。。
>
... 将请求InputStream复制到成员OutputStream。。。
if(this.getContentType() != null && requestBody != null) {
if(this.getContentType().contains(MediaType.APPLICATION_FORM_URLENCODED_VALUE) && requestBody.contains(parameterName+"="))
return getFormEncodedParameter(requestBody, parameterName);
else if(this.getContentType().contains(MediaType.MULTIPART_FORM_DATA_VALUE) && requestBody.contains("name="+"\""+ parameterName +"\"")) {
return getMultipartParameter(requestBody, parameterName);
}
}
}
这两种方法都会进行一些字符串分析。。。这是我真的不喜欢的部分。它与核心业务逻辑没有任何关系,虽然它正在从多部分请求中获取csrf“参数”,但我对实现没有100%的信心。
您应该阅读参考文献中讨论CSRF和Multipart请求的部分。您有两个选项:
参考资料中描述了每种方法的优缺点。
最后,如果您想提供一个自定义过滤器,可以使用XML元素来实现,该元素只引用实现过滤器的Springbean。例如:
<http ...>
...
<custom-filter ref="customCsrfFilter" position="CSRF_FILTER"/>
</http>
问题内容: 我在用Java应用程序服务器处理multipart / form-data请求时非常困难。从我发现的情况来看,servlet 3.0规范提供了诸如HttpServletRequest.getParts()之类的方法,这对于处理上传到我的servlet的表单数据是理想的。 但是,此方法是3.0 Servlet规范的一部分,并且我的应用程序服务器(Tomcat 6)尚不支持此方法。即使具有
问题内容: 我正在尝试通过带有POST请求的照片上传 根据自述文件,我应该能够做到这一点 问题是,这不起作用。我收到测试服务器的回复,说它转储了0个post变量。 我已经确认该HTML小页面服务器处于工作状态 所以问题是,请求模块在做什么?有没有更好的方法来发送节点? 问题答案: 经过更多研究后,我决定使用。这使得分段上传非常容易。
我正在使用Amazon SNS在我的HTTP/HTTPSendpoint上接收推送消息。endpoint应用程序是用Django编写的。要在endpoint(web app)上接收通知,HTTP/HTTPSendpoint需要订阅一个主题。 我的问题是当Amzaon SNS发送订阅确认时,它如何在POST请求中发送CSRF令牌,以便我处理请求并检索所需信息? 文档:http://docs.aws.
您好,我正在独立应用程序上使用java中的vertx读取web应用程序中的端口。我想从表单中获取post数据。我的web应用程序有一个带有post方法的表单,我希望阅读该表单。我的逻辑是 > 创建垂直线 创建http服务器 创建处理程序请求(它不接受代码中的所有参数) 我不知道我错过了什么,我是vertx的新手。 出于某种原因,我不能在这里发布代码。 我的代码:https://pastebin.c
问题内容: 在Apache Commons HttpClient的3.x版本中,可以进行multipart / form-data POST请求(2004年的示例)。不幸的是,这在HttpClient的4.0版本中不再可能。 对于我们的核心活动“ HTTP”,多部分内容超出了范围。我们很乐意使用由其他项目维护的多部分代码,但我对此一无所知。几年前,我们曾尝试将多部分代码移至commons编解码器,
我正在使用请求库编写Web服务客户端。我正在获取包含文件和文本json的多部分/表单数据。我不知道如何解析它。是否有合适的库来解析python中的多部分/表单数据格式,或者我应该自己编写解析器? 我的代码: b'\r\n--c00750d1-8ce4-4d29-8390-b50bf02a92cc\r\nContent-Displace: form-data; name="playback Hash