网站建设空白栏目整改报告,网站服务内容有哪些,自己做的网站怎样才有网址浏览,百度关键词价格查询软件Cross-Site Request Forgery (CSRF) 是一种攻击#xff0c;它利用了用户在浏览器中对特定网站的登录状态。攻击者可以在他们控制的网站上构造一个请求#xff0c;当用户访问这个网站时#xff0c;这个请求会在用户的浏览器中执行#xff0c;并带有用户对目标网站的凭证它利用了用户在浏览器中对特定网站的登录状态。攻击者可以在他们控制的网站上构造一个请求当用户访问这个网站时这个请求会在用户的浏览器中执行并带有用户对目标网站的凭证例如cookies。如果目标网站没有合适的防护措施攻击者就可以在用户不知情的情况下以用户的身份执行操作。
Spring Security 默认启用了 CSRF 保护它通过一个 CSRF token 来确保只有知道这个 token 的请求才能执行改变状态的操作。这个 CSRF token 会在每个 session 中生成并在每次请求中验证。
然而当你使用 JWT 进行认证时你可能会选择不使用 session因为 JWT 是无状态的它包含了所有必要的用户信息。在这种情况下没有 session也就没有地方存储 CSRF token所以 CSRF 保护实际上是无效的。
此外JWT 通常不会存储在 cookie 中而是存储在前端的本地存储中然后在每个请求的 Authorization 头中发送。因为 CSRF 攻击是通过 cookie 来携带用户凭证的所以如果你不使用 cookie 存储用户凭证你就不会受到 CSRF 攻击的影响。
因此当使用 JWT 进行认证时你通常可以关闭 Spring Security 的 CSRF 保护。但是请注意你应该仍然防范其他的安全威胁例如 Cross-Site Scripting (XSS) 攻击它可以用来窃取前端存储中的 JWT。
在使用 JWT 的情况下应对 CSRF 的最佳做法主要取决于你如何存储和传输 JWT 不存储 JWT 在 Cookie 中 如果你将 JWT 存储在前端的一个地方例如localStorage 或 sessionStorage并且在每次请求时手动把 JWT 添加到 Authorization header那么你的应用本质上就是免疫于 CSRF 攻击的。这是因为 CSRF 攻击是通过利用浏览器会自动发送 Cookie 的特性而浏览器不会自动添加 JWT 到 Authorization header。 存储 JWT 在 Cookie 中 如果你选择将 JWT 存储在 Cookie 中那么你的应用就有可能受到 CSRF 攻击。在这种情况下你可以使用 Double Submit Cookie 方案来防止 CSRF 攻击。这个方案的实现方法是在设置 JWT 的同时设置一个额外的 CSRF Token Cookie并将这个 CSRF Token 也返回给前端。然后前端在每次请求时除了浏览器自动发送的 JWT Cookie还要手动把 CSRF Token 添加到请求的 headers 或 body。服务器在接收到请求时会比较 CSRF Token Cookie 和请求的 headers 或 body 中的 CSRF Token 是否一致从而防止 CSRF 攻击。
无论你选择哪种方法都应当注意防止其他类型的攻击例如 Cross-Site Scripting (XSS) 攻击和 Man-in-the-Middle (MITM) 攻击。例如你应当使用 HTTPS 来防止 MITM 攻击使用适当的策略和技术例如Content Security Policy对用户输入的严格检查和清理来防止 XSS 攻击。