网络安全

前端相关的网络安全问题有挺多的,这里主要介绍有3个:

跨站脚本(XSS)

Cross Site Scripting,因其简写与CSS(层叠样式表)冲突,所以改用XSS。它主要是指攻击者可以在页面中插入恶意脚本代码,当用户访问这些页面时,浏览器会解析并执行这些恶意代码,从而达到窃取用户身份、钓鱼、传播恶意代码等行为。

它一般有3种类型:

  • 反射型
    反射型XSS也叫非持久型XSS,是指攻击者将恶意代码拼写在URL中提交给服务器,服务器返回的内容,也带上这段XSS代码,最后浏览器执行了这段恶意代码。

  • 存储型
    破坏性较大,因为存储的恶意代码存储在数据库等地方,每次访问页面都会触发XSS
    比如个性签名,攻击者在个性签名输入恶意代码并提交到服务器,如果这段代码没做任何处理直接存储到数据库,那么其它用户访问这个人主页时就会执行这段恶意代码。

  • DOM型
    在搜索关键字的URL时,在search后输入恶意脚本,然后url由前端解析回显时,那么攻击就变成了DOM型了。

<script>
  var search = location.search.replace('?search=', '')
  document.write('你搜索了:' + decodeURI(search))
</script>

XSS防御手段

参数校验

对HTTP请求的URL参数和请求体payload的数据进行校验 ,在后端,需要判断数据是否是正常类型,对于不符合校验规则的数据及时抛出错误

字符转义

对一些特殊符号,比如<>&"'/等,前端对其进行转义,后端保存转义后的内容。当前端要回显时,再把它们转义成原来的字符串显示。
对于用户输入的字符串内容,不要使用eval, new Function等动态执行方法,也不要将这些字符串通过innerHTML、outerHTML、document.write()方式写到HTML中。
对于非客户端cookie,比如保存用户凭证的session,将其设置为http only,避免前端访问cookie

跨站请求伪造(CSRF攻击)

CSRF是在受害者毫不知情的情况下,以受害者名义伪造请求发送给受攻击站点,从而在并未授权情况下执行在权限保护之下的操作。
和XSS相比,CSRF并不需要直接获取用户信息,只需要“借用”用户的登录信息相关操作即可,隐蔽性更强。

比如用户转账http://bank.com/widthdraw?amout=100&to=B,攻击者往往通过广告、图片等方式诱使用户点击,从而使用用户的cookie信息向第三方发送恶意请求,比如下面这种嵌入的隐藏表单

<form action="http://bank.com/widthdraw" method="POST">
  <input type="hidden" name="amout" value="10000">
  <input type="hidden" name="to" value="hacker">
</form>
<script>document.forms[0].sumbit();</script>

CSRF防御

携带referer请求头

发送请求方,会在设置请求头处添加referer防盗链字段,用于说明请求源,服务器判断referer来拒绝不受信任的源发出的请求。

添加请求头token

攻击者大多使用cookie来通过验证,所以可以通过添加请求头,比如token,服务器通过token才响应正确的内容。

添加验证码

由于用户是在不知情情况下发送请求的,可以通过添加让用户二次确认的手段,比如验证码,来防御攻击。不过验证码会影响用户体验,所以不能频繁使用。

点击劫持(Click Jacking)

点击劫持主要是利用iframe,把要攻击的页面嵌套到恶意网站,隐藏显示iframe,并覆盖在恶意网站上。当点击恶意网站时,就会触发嵌套页面的事件,这就是点击劫持。
比如,利用iframe把页面A嵌入到其它页面B,通过设置样式,让页面A透明显示,将A中的按钮与B页面的按钮位置重叠,当点击B页面的按钮时,实际上就点击了我A页面的按钮,触发了A页面事件

<!-- (hack)B页面,劫持A页面 -->
<body>
  <button onclick="console.log('点击B页面的按钮')">B页面按钮</button>
  <!-- A页面被B页面点击劫持了 -->
  <iframe src="http://other.com/8888/a.html" frameborder="0" style="position: absolute;top: 0;left: 0;opacity: 0;"></iframe>
</body>
<!-- A页面-->
<button onclick="alert('我是A页面被点击劫持的按钮')">A页面按钮</button>

当我把opacity: 0;注释掉后,会发现A页面是完全覆盖在B页面的按钮上的

image.png

去掉注释,点击B页面按钮,实际点击到了A页面


image.png

这样,A页面内容就被恶意嵌套到别人网站上了,如果此按钮是发送请求之类的,那么A服务器就会一直收到请求

ok,知道了它怎么攻击,接下来看它的防御

点击劫持防御

因为它攻击的原理是利用了iframe,所以服务器可以通过设置响应头X-Frame-Options来告诉浏览器允许哪些域名引用当前页面。它可以设置这几个值:

  • DENY:表示页面不允许在iframe中引用,即使是相同域名页面嵌套也不允许,比如github用了这个
  • SAMEORIGIN:表示该页面可以在相同域名页面的iframe中引用,比如知乎响应头用了这个
  • ALLOW-FROM [URL]:表示该页面指定来源的iframe中引用
ctx.set('X-FRAME-OPTIONS', 'DENY')

除了人工手段防御外,我们还可以使用漏洞扫描工具对网站进行测试,提前发现安全漏洞。

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

推荐阅读更多精彩内容

  • 1 同源策略 如果两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源。 同源策略限制了来自不同源...
    六月太阳花阅读 357评论 0 0
  • 利用TCP协议实现synflood攻击 运行syn攻击程序,以靶机为目标主机对其发送syn数据包,查看目标主机状态...
    yingtaomj阅读 2,161评论 0 1
  • xss (跨站脚本攻击) 指攻击者在页面上注入恶意代码,通过恶意脚本对网页进行串改,在用户浏览网页时,对用户浏览器...
    lmmy123阅读 116评论 0 0
  • 今天青石的票圈出镜率最高的,莫过于张艺谋的新片终于定档了。 一张满溢着水墨风的海报一次次的出现在票圈里,也就是老谋...
    青石电影阅读 10,307评论 1 2
  • 今天主要学习了flex布局,学习笔记如下: 1.指定flex布局: display:flex(任意容器)...
    riku_lu阅读 3,132评论 2 3