浏览器安全之 CSRF

发布于 2023-08-24 17:09:46 字数 1912 浏览 32 评论 0

CSRF (Cross-Site Request Forgery)跨站请求伪造,从字面上看,一个是 跨站点 ,表示恶意攻击的请求是来自不同域的;另一个是 伪造 ,表示这个请求并非用户真实意愿发出的,而是通过某种欺骗手段诱使用户去点击从而产生攻击。

一个例子

现在我们有以下两个站点:

假设 a 站点有个文章列表,点击按钮可以删除文章,对应的请求是 www.a.com/article/del?id=1
那么 CSRF 的攻击思路是什么呢?

  • 首先,既然是跨站,那么在 b 站点构造一个 www.b.com/csrf.html 页面
  • 然后,利用 img 标签没有跨域的限制,在页面里放置一张图片 <img src="http://www.a.com/article/del?id=1" />
  • 接下来,还有一个关键点,就是欺骗已经登录网站 a 的用户,来访问 b 站点构造的这个页面,这个时候有了登录态,img 发出请求就会携带 cookie,然后就可以不知不觉地把这篇文章删掉了

上面这种是 GET 请求,另外还有 POST 请求,思路是一样的:例如要在 a 站点新增一篇文章,那就在 b 站点里伪造页面后,使用 JavaScript 构造一个表单, action 地址指向 a 站点新增文章的 api 地址,用户访问后,请求就会携带 cookie,经过身份认证后,就能不知不觉新增一遍文章了。

CSRF 分类

  • HTML CSRF 攻击
  • JSON 劫持攻击
  • Flash CSRF 攻击 (Flash 退出历史舞台了,了解就好)

HTML CSRF 攻击简单来说就是请求是由 HTML 元素发出的,比如 img , link , a 这些自带跨域的标签。
JSON HiJacking 攻击就是对 AJAX 请求返回的 json 数据进行劫持,比如某个接口 url 提供了 callback 回调来处理数据,那么利用这个 callback 伪造出 CSRF 请求,对数据进行操纵攻击。

CSRF 的危害

  • 篡改目标网站上的用户数据
  • 利用用户 cookie 信息做一些恶意操作
  • 传播 CSRF 蠕虫

防范 CSRF

  • 针对跨站问题,可以判断请求来源,具体是优先判断 origin,因为它考虑安全,origin 只包含域名信息;其次是 referrer ,里面包含了详细 path
  • 针对 cookie 被盗用问题,可以对 cookie 设置 Samesite 属性,这个属性支持三个值:
    • Strict :开启严格模式,这种模式下 cookie 在任何时候都不能作为第三方 cookie 来使用
    • Lax :宽松模式,允许部分请求携带 cookie,通常是 GET 请求
    • None :不做啥限制,每次请求都可以携带 cookie 发送
  • CSRF token :既然是通过伪造请求实现攻击,那么可以由服务端下发一个 token 给客户端,客户端妥善保管好它,然后每次请求时携带这个 token ,服务器校验 token 的合法性,以此来区分正常用户请求和非法请求。
  • 对于普通用户来说,不要随便打开一些来路不明的链接,尤其是邮件里收到的一些垃圾邮件

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

我也只是我

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文