前端安全防范

CSRF

介绍

CSRF(Cross-Site Request Forgery)的意思是跨站点请求伪造,也被称作一键攻击或会话控制。其原理是攻击者构造网站后台某个功能接口的请求地址,诱导用户去点击或使用特殊方法让该请求地址自动加载。用户在登录状态下这个请求被服务器接收后会被误以为是用户合法的操作。对于GET形式的接口地址可轻易被攻击。对于POST形式的接口地址也不是百分百安全,攻击者可以诱导用户进入带Form表单并且可用POST方式提交参数的页面。

一个典型的CSRF有着如下的流程:

  • 受害者登陆a.com,并保留了登录凭证(Cookie)
  • 攻击者引诱受害者访问了b.com
  • b.com向a.com发送了一个请求:a.com/act=xx,浏览器会默认待a.com的Cookie
  • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求
  • a.com以受害者的名字执行了act=xx
  • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,并让a.com执行了自己定义的操作

CSRF几种类型

1.GET类型的CSRF

受害者访问包含这个img的页面后,浏览器会自动向发出一次http请求,网站会收到包含受害者登录信息的一次跨域请求。

2.POST类型的CSRF

这种类型的CSRF利用起来通常使用的是一个自动提交的表单,访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。
POST类型的攻击通常比GET要求更严格一些,但不能将安全寄托在仅允许POST上面。

3.链接类型你的CSRF

链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布的图片里嵌入恶意链接,或者以广告的形式诱导用户中招。

<a href="https://test.com">重磅消息!</a>

CSRF的特点

  • 攻击一般发起在第三网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生
  • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取数据
  • 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是冒用
  • 跨站请求可以用各种方式:图片url,超链接,CORS,Form提交等。部分提交方式可以直接嵌入第三方论坛、文章中,难以进行追踪。
    CSRF通常是跨域的,因为外域通常更容易被攻击者掌控,但是如果本域下有容易被利用的功能,比如可以发图和链接的论坛和评论区,攻击可以直接在本域下进行,而且这种攻击更加危险。

防护策略

上文中讲了CSRF的两个特点:

  • 通常发生在第三方域名。
  • 攻击者不能获取到Cookie等信息,只是使用。

针对这两点,可以专门制定防护策略:

  • 阻止不明外域的访问:同源检测,Samsite Cookie
  • 提交时要求附加本域才能获取的信息:Origin Header,Referer Header

同源检测

在http协议中,每一个异步请求都会携带两个Header,用于标记来源域名:

  • Origin Header
  • Referer Header

这两个Header在浏览器发起请求时,大多数情况会自动带上,并且不能由前端自定义内容,服务器可以通过解析这两个Header中的域名,确定请求的来源。

使用Origin Header确定来源域名

如果origin存在,那么直接使用origin中的值来确定来源域名就可以。但是origin在一下两种情况并不存在:

  • IE11同源策略:IE11不会在跨域CORS请求上添加Origin,Referer将仍然是唯一的标识,最根本的原因是因为IE11对同源的定义和其他浏览器不同。
  • 302重定向:在302重定向之后origin不包含在重定向的请求中,因为origin可能会被认为是其他来源的敏感信息。对于302重定向的情况来说都是定向到新的服务器上的url,因此浏览器不想将Origin泄漏到新的服务器上。
使用Referer Header确定来源域名

根据http协议,在http头中有一个字段叫referer,记录了该http请求的来源地址。
对于Ajax请求,图片和script等资源的请求,referer为发起请求的页面地址。
对于页面跳转,referer为打开页面历史记录的前一个页面地址。
因此我们使用referer中链接的origin部分可以得知请求的来源域名。

将referer policy的策略设置成same-origin,对于同源的链接和引用,会发送referer,referer的值为host不带path;跨域访问则不携带referer。

设置referer policy的方法有三种:

  • 在CSP设置。
  • 页面头部增加meta标签。
  • a标签增加referrerpolicy属性。

在以下情况里referer没有被携带或者不可信:

  • IE6、IE7使用window.location.href=url进行界面的跳转,会丢失referer。
  • IE6、IE7使用window.open,也会缺失referer。
  • HTTPS页面跳转到HTTP页面时,所有浏览器referer都丢失。
  • 点击flash上到达另一个网站时,referer的情况比较杂乱,不太可信。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • XSS输入过滤 functionespace(str){ str=str.replace(/&/g,'&amp;'...
    demoxjl阅读 208评论 0 0
  • 1)XSS:跨站脚本攻击 就是攻击者想尽一切办法将可以执行的代码注入到网页中。 存储型(server端): 场景:...
    ChenZi_Y阅读 907评论 0 0
  • 一. 浏览器安全策略 同源策略 浏览器的安全都是以同源为基础,它是浏览器最核心也最基本的安全功能 同源策略规定:不...
    菊花泡茶阅读 524评论 0 0
  • 以下题目是根据网上多份面经收集而来的,题目相同意味着被问的频率比较高,有问题欢迎留言讨论,喜欢可以点赞关注。 以下...
    Aniugel阅读 14,729评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,532评论 28 53