当前位置: 首页 > 知识库问答 >
问题:

Spring Security 3.2、CSRF和多部分请求

楚志强
2023-03-14

这个问题与此url中的问题有关,Spring Security 3.2 CSRF支持多部分请求

我尝试了完全相同的设置以及要点,但我无法让它工作,除非我在url中有_csrf令牌。我在表单正文中将其作为隐藏字段,并在安全过滤器之前指定了过滤器,但没有任何乐趣,每次使用无效csrf令牌的调试日志消息时都会失败

在此方面的任何帮助都将不胜感激

干杯Damien

共有1个答案

诸葛卜霸
2023-03-14

如果没有要点,很难找到,但我终于明白了!

事实上,它与Spring Security无关。真正的问题只出在SpringFramework的多部分配置中。但正因为如此,请求似乎根本没有参数(既不是_csrf,也不是file),第一个检测到它的是CsrfFilter。我删除了所有关于html" target="_blank">安全的内容,错误是请求的参数文件不存在(或者类似的东西...)

如Spring Framework手册所述,multipart可以通过两种方式进行处理:

>

  • 使用Apache commons文件上载
  • 使用servlet 3.0配置

    1. 您遵循了相关帖子的第一个解决方案,并在mvc dispatcher servlet中配置了CommonsMultipartResolver。xml。第一个问题是,MultipartFilter与全局servlet上下文相关,并在根应用程序上下文而不是特定于servlet的上下文中查找其MultipartResolver

    第二个问题是您忘记在pom.xml中添加对Apache公共文件上传的依赖。

    因此,您必须首先在pom中添加这种依赖性。xml

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
    

    接下来,必须从mvc dispatcher servlet中删除filterMultipartResolver bean。xml,并在根应用程序上下文中声明它。作为一个快速而肮脏的修复,您可以将其添加到spring security中。xml:

    <beans:bean id="filterMultipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <beans:property name="maxUploadSize" value="100000000" />
    </beans:bean>
    

    您只需添加一个

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <multipart-config>
            <!--location>/tmp</location-->
            <max-file-size>1000000</max-file-size>
        </multipart-config>
    </servlet>
    

  •  类似资料:
    • 我们在应用程序中使用Spring Security性已有几年了。上周,我们将Spring Security从3.1.4版升级到3.2.0版。升级进行得很顺利,升级后我们没有发现任何错误。 在浏览Spring Security 3.2.0文档时,我们发现了围绕CSRF保护和安全标头的新增功能。我们遵循Spring Security 3.2.0文档中的说明,为受保护的资源启用CSRF保护。在我们的应用

    • 问题内容: 几年来我们一直在我们的应用程序中使用Spring Security。上周,我们将Spring Security从3.1.4版本升级到了3.2.0。升级进行得很好,并且升级后我们没有发现任何错误。 在浏览Spring Security 3.2.0文档时,我们发现了CSRF保护和安全标头周围的新增功能。我们按照Spring Security 3.2.0文档中的说明为受保护的资源启用CSRF

    • 问题内容: 我有一个API端点,必须向其发送多部分HTTP请求,该请求由两部分组成(文件系统文件)和(JSON对象)。 经过一些研究,我发现了如何在AngularJS中执行多部分请求: 1) 该函数最初具有以下形式: 此实现的结果是,请求的各个部分没有设置。 Blob ,对象看起来像这样(有点混乱,基本上第一部分是of ,第二个): 第二种方法为请求的每个部分设置了正确的内容,但没有为部分设置任何

    • 当我尝试上传一个文件和标题时,我得到以下异常。我正在将Content-Type头设置为multipart/form-data。 我如何在Spring Security后面做文件上传?这个请求似乎从未被转换成MultiPartHttpServerRequest,所以它不起作用? 如果更改方法签名以采用@RequestParam MultipartFile,则会出现如下异常: ...但我在XML中配置

    • 问题内容: 我用, Spring Framework 4.0.0发布(GA) Spring Security 3.2.0发布(GA) Struts 2.3.16 在其中,我使用内置的安全令牌来防御CSRF攻击。 Struts表单如下所示。 生成的HTML代码如下。 除非请求是多部分的,否则在此情况下,请求以状态码403结束,这可以很好地工作。 HTTP状态 403-在请求参数标头’X-CSRF-T

    • null 其中,我使用内置的安全令牌来防范CSRF攻击。 Struts表单如下所示。 生成的HTML代码如下所示。 文件如下所示。 那么,当请求是多部分的时候,在哪里寻找这个令牌呢?(这应该与Struts无关。) 的实现可以在前面的问题中找到,如果需要的话。