您当前的位置: 首页 > 技术文章 > 前端开发

如何防止CSRF攻击

作者: 时间:2023-11-21阅读数:人阅读

如何防止CSRF攻击

  1. CSRF不需要将恶意代码注入用户的页面,仅仅是利用服务器的漏洞和用户的登录状态来实施攻击。

要让服务器避免遭受到CSRF攻击,通常有一下几种途径:

  1. 充分利用好cookies的SameSite属性:黑客会利用用户的登录状态发起CSRF攻击,而Cookie正式浏览器和服务器之间维护登录状态的一个关键数据。要防止CSRF攻击,最后能实现从第三方站点发送请求时禁止Cookie的发送。
  2. 在Http响应头中,通过设置set-cookie时,可以带上SameSite选项,如下:
    在这里插入图片描述
    (1)Strict最为严格,浏览器会完全禁止第三方Cookie
    (2)Lax相对宽松,在跨站点的情况下,从第三方站点的链接打开和从第三方站点提交get方式的表单这里两种方式都会携带Cookie。但如果在第三方站点中使用Post方法,或者通过img、iframe等标签加载的URL,这些常见都不会携带Cookie
    (3)如果使用None的话,在任何情况下都会发送Cookie数据
  3. 验证请求的来源站点:由于CSRF攻击大多来自第三方站点,因此服务器可以禁止来自第三方站点的请求。
    (1)HTTP请求头中的Referer和Origin属性:
    Referer是Http请求头中的一个字段,记录了该Http请求的来源地址值。比如我从极客时间的官网打开了 InfoQ 的站点,那么请求头中的 Referer 值是极客时间的 URL。但是有些场景是不适合将来源URL暴露给服务器的,因此浏览器提供给开发者一个选项,可以不用上传Referer值,具体可以参考Referrer Policy
    (2)但在服务器端验证请求头中的 Referer 并不是太可靠,因此标准委员会又制定了Origin 属性,在一些重要的场合,比如通过 XMLHttpRequest、Fecth 发起跨站请求或者通过 Post 方法发送请求时,都会带上 Origin 属性,如下图:Origin 的值之所以不包含详细路径信息,是有些站点因为安全考虑,不想把源站点的详细路径暴露给服务器。
    在这里插入图片描述
  4. CSRF Token,这样流程大致分为两步:
    (1)在浏览器向服务器发起请求时,服务器生成一个CSRF Token。CSRF Token其实就是服务器生成的字符串,然后将该字符串植入到返回的页面中。
    (2)第二步,在浏览器端如果要发起转账的请求,那么需要带上页面中的 CSRF Token,然后服务器会验证该 Token 是否合法。如果是从第三方站点发出的请求,那么将无法获取到 CSRF Token 的值,所以即使发出了请求,服务器也会因为 CSRF Token 不正确而拒绝请求

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:licqi@yunshuaiweb.com

标签: java html5
加载中~