CSRF和XSS

参考:https://tech.meituan.com/2018/10/11/fe-security-csrf.html

一、CSRF(跨站伪造请求)

首先,CSRF是攻击者对浏览器的欺骗。

攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获得注册凭证(cookie),绕过后台用户验证,达到冒充用户对被攻击网站执行某项操作的目的。

流程:

  1. 受害者登录A网站(a.com),保留了登录凭证Cookie
  2. 攻击者诱导受害者访问b.com
  3. b.com向a.com发请求:a.com/act=xx。浏览器会以为是用户发请求,就默认携带a.com的Cookie
  4. a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
  5. a.com以受害者的名义执行了act=xx。
    6.攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。


栗子:

一、GET类型的CSRF

假如博客园有个加关注的GET接口,blogUserGuid参数很明显是关注人Id,如下:


然后我只用在我的博客里加一个img标签


就有人会打开博客,自动加关注。

二、POST类型的CSRF

假如还是有个加关注的接口,不过已经限制了只获取POST请求的数据。这个时候就做一个第三方的页面,诱惑用户去打开,打开过的用户就中招了。


最好要加一层iframe,因为不加iframe页面会重定向,降低攻击的隐蔽性。弄一个表单,用户已打开,就自动提交。

特点:

  1. 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。
  2. 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。
  3. 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。
  4. 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪。

CSRF通常是跨域的,因为外域通常更容易被攻击者掌控。但是如果本域下有容易被利用的功能,比如可以发图和链接的论坛和评论区,攻击可以直接在本域下进行,而且这种攻击更加危险。

防护策略:

一般CSRF由第三方网站发起,你无法防止被攻击,只能增强自己网站的防御能力来提升安全性。
CSRF有两个特点:

  1. 通常发生在第三方域名
  2. CSRF攻击者只是使用Cookie,但是不能获取Cookie

针对这两点,有如下防御措施:

1. 同源检测

检查请求头的referer和origin。
对于origin,可直接确定域名,不含有query和path。
但是,有些情况,origin不存在,如IE11的cors请求,,302重定向。(因为重定向都是都是请求新的服务器的url,浏览器不想把此服务器的源泄露给新的服务器。)
对于referer,referer是浏览器挂上的,但是referer可以通过手动设置referer policy给隐藏掉,攻击者可以发不带referer字段的请求。
因此,拦截没有origin和referer的请求,十分重要。
但是对于在本域的csrf,这种检测是防御不了的。

2. CSRF token

这个是基于攻击者无法获取用户的信息(cookie、header和网页)。csrf之所以成功是因为服务器识别不出来到底是攻击者网站发的请求还是用户发的。
因此我们要求用户请求都携带一个csrf无法获取到的token。
在用户打开页面的时候,服务器给用户生成一个随机字符串+日期的token,token也放在服务器的session中,之后再加载页面,用js遍历dom树,给所有的form和a标签加token。
对于get请求,token加载query里,对于post,如表单,token加载value里。
这个方法在没有泄露token的话是十分安全的,但是对于所有的页面及里面的表单进行token验证,不能有一种通用的拦截方式来统一拦截,对于后台来讲,拦截检查工作量大。

3. 双重Cookie

1.1. 在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串
2.2 在前端向后端发起请求时,取出Cookie,并添加到URL的参数中
3.3 后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝

优点:
1.无需使用Session,适用面更广,易于实施。
2.Token储存于客户端中,不会给服务器带来压力。
3.相对于Token,实施成本更低,可以在前后端统一拦截校验,而不需要一个个接口和页面添加。

缺点:
1.如果有其他漏洞(例如XSS),攻击者可以注入Cookie,那么该防御方式失效。
2.难以做到子域名的隔离。

4. samesite Cookie

Set-Cookie响应头中新增的属性,由strict 和lax 模式,strick模式下的cookie,若由第三方网站请求,请求中不会含有这个cookie字段。lax相反,为第三方cookie。

栗子:假如淘宝网站用来识别用户登录与否的 Cookie 被设置成了 Samesite=Strict,那么用户从百度搜索页面甚至天猫页面的链接点击进入淘宝后,淘宝都不会是登录状态,因为淘宝的服务器不会接受到那个 Cookie,其它网站发起的对淘宝的任意请求都不会带上那个 Cookie。

二、XSS(跨网站脚本攻击)

  1. 攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
  2. 恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
  3. 在部分情况下,由于输入的限制,注入的恶意脚本比较短。但可以通过引入外部的脚本(重定向),并由浏览器执行,来完成比较复杂的攻击策略。

防御:

XSS攻击有两要素

  1. 攻击者提交恶意代码
  2. 浏览器无法识别恶意代码,就执行恶意代码。

对于攻击者提交恶意代码,我们可以想办法过滤。

对于后端,在把代码写入数据库前,进行转义,如把<变成&lt

对于前端,尽量不要自己拼接html,尽量用text方法,html字符识别会自动识别标签。

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