前端网络安全-XSS和CSRF

前端安全问题

1.cookie失窃

黑客网站通过script获取本地用户访问其他网站的cookie,cookie是用户访问网站的登陆凭证,通过cookie可以发起请求

恶意网站获得cookie后伪装用户发起请求,例如转账等

2.密码失窃

黑客网站通过iframe嵌入安全网站,黑客网站通过js修改用户点击登陆操作的form-action,使请求转向黑客网站后台,黑客获取到用户登陆信息

3.同源策略

为了杜绝以上黑客攻击,浏览器标准定制了同源策略

1)什么是同源?

协议、域名host、端口号一致视为同源

2)同源的操作权限
  • 读取localstorage、cookie、indexDB
  • 操作dom
  • XMLHttpRequest请求
注意:
  1. 带src属性的标签不受同源策略的影响。比如script、img、iframe、link,这样方便用户跨源引用资源。相当于浏览器发送get请求
  2. 提交表单不受同源策略的影响(关于原因以及如何利用表单做跨域请求,将另起一篇文章说明)
  3. 对于二级域名不同的情况,可以通过设置domain为顶级域名使得cookie\localstorage等信息可以在二级域名之间共享
前两个不受同源策略影响的特性,恰恰是CSXF攻击的原理!后文会讲到

4.XMLHttpRequest的跨域请求

通过服务器中转的方式

js先请求同源服务器,同源服务器转发请求目标服务器,目标服务器添加了白名单,同源服务器作为代理人,称为代理模式

这种XMLHttpRequest请求的方式成为CORS(crossing origin resource sharing),跨源资源共享

5.XSS

浏览器添加了同源策略,杜绝了非同源js请求

黑客:在目标网站的表单里填写script代码提交到后台服务器,当表单内容展示到页面上时,会触发攻击,如:

image.png
image.png

以这种隐蔽的方式实现将本地数据提交(get请求)到黑客网站后台

这种攻击方式叫做crossing site scripting,跨站脚本,简称XSS

例如邮箱的内容中默认不显示图片,就是为了屏蔽这种攻击

6.XSS防护

1)cookie加上HttpOnly,只允许请求,不允许js读取

2)服务端安全过滤,过滤script信息

3)前端展示安全过滤

7.CSRF

CSRF示意图:


image.png

触发条件(需要同时满足):

  • 浏览器支持(没有禁用)cookie
  • 目标网站没有做 CSRF 相关的预防措施(有漏洞)
  • 目标网站基于 cookie/session 来做身份认证
  • 用户已在目标网站A登陆,并且没有登出,并且没有清空 cookie,并且 cookie 没有过期的情况下访问黑客网站
  • 黑客网站B请求了目标网站A

触发方式:

  1. 点击请求:用户点击黑客网站链接,a标签
  2. 自动请求:黑客网站创建表单发起请求(支持POST请求),或者通过js创建img元素设置src(GET请求),自动请求具有隐蔽性
    示例:
<!--链接方式,诱导点击-->
<a href="http://www.targetBank.com/Transfer.php?toBankId=11&money=1000">点击领红包</a>

<script>
// 资源请求
(new Image()).src = 'http://www.targetBank.com/Transfer.php?toBankId=11&money=1000';
</script>

// form表单请求
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>黑客网站</title>
</head>
<body onload="steal()">
    <div style="display:none">
        <form method="POST" name="transfer" action="http://www.targetBank.com/Transfer.php" target="steal">
            <input type="hidden" name="toBankId" value="11">
            <input type="hidden" name="money" value="1000">
        </form>
    </div>
    <iframe name="steal" display="none"></iframe>
    <script type="text/javascript">
        document.querySelector('[name=transfer]').submit();
    </script>
    </body>
</html>
<!-- 
说明:
1.form表单提交以后,普通情况下会页面跳转至action指定页面
2.通过在页面上添加一个隐藏的iframe,将form的target指向iframe的name,
此时表单是在iframe中提交与跳转,不影响外层页面
 -->

攻击升级:
提交内容里带上超链接,诱导其他用户看到内容后点击,跳转到目标网站后再次触发CSRF
示例:

<script>
  (new Image()).src = 'http://www.tieba.com/comment?id=11&content=<a href=www.hack.com/index.html>点击领红包</a>';
// 其中包含了XSS攻击方式,当提交的内容被展示到目标网站上的时候,诱导更多用户去点击黑客网站
</script>

触发原因:

  1. 同源策略阻止了js读取其他网站的cookie等内容,但没有防止js向其他网站发出请求
  2. 同源策略限制了ajax请求,但没有限制form表单提交,前文提过img标签不受同源策略限制
  3. 黑客网站利用用户向目标网站发起请求的时候,请求会带上目标网站下发的cookie

这种攻击方式叫做cross site request forgery,跨站请求伪造

8.CSRF攻击防护

  1. referer(在http请求头中)验证解决方案,浏览器会告诉服务器,哪个页面发送了请求
    不过由于 http 头在某些版本的浏览器上存在可被篡改的可能性,所以这个解决方案并不完善
  2. 目标网站通过cookie生成hash值,提交请求时带上hash值,服务端对hash进行过滤
  3. 表单提交加验证码,如图片上的随机字符串
  4. 用户登录时服务端生成token,之后用户请求必须带上token
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容