【问题标题】:How to enable CSRF token with Spring Boot如何使用 Spring Boot 启用 CSRF 令牌
【发布时间】:2020-04-29 23:50:18
【问题描述】:

我使用的是 Spring Boot 2.1.1。我认为 CSRF protection is enabled by default 适用于这个版本的 Spring Boot(如果我错了,请纠正我)。我正在尝试为我的 java Web 应用程序设置 CSRF 保护,但我不确定我需要进行哪些更改才能显示 CSRF 令牌。

我正在尝试通过浏览器检查 CSRF 令牌。但是,令牌的名称和值似乎显示为空白。

我的jsp代码:

<table>
    <c:forEach items="${model.containerObjects}" var="file">
        <tr>
            <form action="/path/container?fileName=${file.getName()}" method="post" id="${file.getName()}">
                <input form="${file.getName()}" type="hidden" value="${file.getName()}" />
                <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
                <td><a href="javascript:{}" onclick="document.getElementById('${file.getName()}').submit()">${file.getName()}</a></td>
                <td>${file.getContentLength()}</td>
                <td>${file.getLastModified()}</td>
            </form>
        </tr>
    </c:forEach>
</table>

但是,(我假设)CSRF 令牌应该位于前端的行如下所示:

<input type="hidden" name="" value="">

我还确保与此端点对应的后端方法使用@POST 进行注释。我还有什么遗漏的吗?

【问题讨论】:

  • 是的,默认情况下应该启用 csrf。 spring-security 依赖项在运行时是否可用(您是否将其添加到 pom.xml 或 gradle 文件中?)?或者您是否有可能以某种方式禁用它(例如,通过自定义 @Configuration 类?)?
  • @qutax 谢谢,我还没有确认,但这听起来像是问题(我没有在我的 pom.xml 中添加 spring 安全依赖项)。
  • @qutax 这确实是缺失的部分。再次感谢!
  • 很高兴听到这个消息!我已将其添加为答案:stackoverflow.com/a/61505985/10551549 :)

标签: java spring-boot jsp csrf


【解决方案1】:

正如我们通过问题的comments 中的对话发现的那样,OP 没有添加必要的 spring-security 依赖项,这是 CSRF 保护所必需的(因为它是 Spring Security 的一项功能)。

【讨论】:

    【解决方案2】:

    如果您想在 html 源代码中看到它,您应该手动添加它。像这样的:

    &lt;meta name="_csrf" th:content="${_csrf.token}"/&gt;

    【讨论】:

    • 也许我理解错了(我对此没有很强的把握),但我尝试使用 当我检查 html 源代码时,这行显示为空白。我按照这里的说明进行操作:docs.spring.io/spring-security/site/docs/5.0.10.RELEASE/…
    • @Azianese 哦,那是我的错,我虽然你使用的是百里香。看起来你做的一切都是对的,可能是配置有问题,我建议你从 insomnia 或邮递员那里向你的控制器请求,看看 csrf 是否真的打开了,这些请求应该有一个 403(我认为)没有csrf 令牌
    • 原来我的 Pom.xml 中缺少 spring-security 依赖项。无论如何感谢您的输入:)
    猜你喜欢
    • 2019-12-30
    • 2021-03-15
    • 2017-09-23
    • 1970-01-01
    • 2020-11-20
    • 2019-03-22
    • 2020-08-03
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多