[书籍精读]《Web前端黑客技术揭秘》精读笔记分享(10)

ClickJacking蠕虫爆发的可能性:分享已经是当前SNS网络中一个很重要的社交内容。只要是带有共享性质的网络社区,都有可能会遭受到ClickJacking蠕虫的攻击;Twitter的一键分享页面已经在HTTP头关键字中加入X-FRAME-OPTIONS来抵御ClickJacking攻击,Facebook的一键分享页面中也使用了Frame Busting脚本来进行抵御;

第十章 关于防御 10.1.浏览器厂商的防御

HTTP响应的X-头部:HTTP响应的扩展头部字段都以X-打头,用于区分标准的头部字段;与前端安全有关的头部字段有如下几个:X-Frame-Options、X-XSS-Protection、X-Content-Security-Policy;1.X-Frame-Options的值有以下两个:DENY(禁止被加载进任何frame)、SAMEORIGIN(仅允许被加载进同域内的frame);2.X-XSS-Protection的值有以下三个:0(表示禁用)、1(默认,对危险脚本做一些标志或修改,以阻止在浏览器上渲染执行,Chrome和IE这方面的行为是有差异的)、1:mode=block(强制不渲染,在Chrome下直接跳转到空白页,在IE下返回一个#符号);

迟到的CSP策略:前面提到Web前端混乱局面,比如IE下的CSS的expression可以写JavaScript,再如,HTML的标签<script>、标签on事件、标签style属性、标签src/href/action等属性都可以内嵌JavaScript执行;HTML仅做HTML的事,JavaScript/CSS都通过加载独立文件的方式被执行。JavaScript/CSS独立文件所在的域可以配置为白名单,这样就能有效地防止加载攻击者域上的相关资源文件。这大大提高了XSS攻击的难度,这就是CSP策略的最大设计初衷;CSP策略使得Web前端更有序,从而更安全,这是一个好趋势,W3C已经在大力推进这样的策略;目前,Chrome支持CSP策略的头部是X-WebKit-CSP,而不是标准的X-Content-Security-Policy;下面举几个应用CSP的场景(1、不允许任何外部的资源加载,且允许内嵌脚本执行;2、仅允许白名单的外部资源加载,不允许内嵌脚本执行;)

10.2.Web厂商的防御

域分离:域分离做得好的可以参考Google,Google将一些业务关联性小的内容转移到了不相干的域中

安全传输:Google很多重要的业务都完美地支持HTTPS安全传输(包括搜索)。安全传输可以有效地防止局域内的明文抓包

安全的Cookie:可以学学Google,某些身份认证相关的Cookie肯定严格设置为HTTPS传输,肯定是HttpOnly标志,这样XSS即使盗取了Cookie,也无法正确使用

优秀的验证码:验证码的出现肯定降低了用户体验,但是这个降低阈值是可以控制好的;Google的验证码公认是比较安全的(字母连着、扭曲变形、线条平滑、无噪等),暴力破解很困难,这也带来了用户体验上的尴尬,经常会输错验证码,说明Google非常重视安全,宁可牺牲一点用户体验;

慎防第三方内容:第三方内容的安全性是经常被大家提起的,常见的有以下几种形式:<script>引用第三方js文件;<iframe>引用第三方HTML文件;<object>等引用第三方Flash等资源

XSS防御方案:一些防御策略(输入校验:长度限制、值类型是否正确、是否包含特殊字符等;输出编码:根据输出的位置进行相应的编码,如HTML编码、JavaScript编码、URL编码;)

CSRF防御方案:针对CSRF攻击的防御,目前常用的有以下几种策略(1.检查HTTP Referer字段是否同域;2.限制Session Cookie的生命周期;3.使用验证码;4.使用一次性token;);一般防御CSRF有三种方法:判断Referer、验证码、token;验证码的弊端很明显:会对用户造成影响;token存在的问题是:时效性无法保证;token防CSRF的原理是:无法通过AJAX等方式获得外域页面中的token值,XMLHttpRequest需要遵守浏览器同源策略;而临时Cookie的原理是:Cookie只能在父域和子域之间设置,也遵守同源策略;

界面操作劫持防御:基于界面操作劫持的攻击模式是用巧妙的视觉欺骗的方式,对Web会话进行劫持;基于界面操作劫持的攻击模式是用巧妙的视觉欺骗的方式,对Web会话进行劫持;目前针对界面操作劫持的防御有以下几种(1.X-Frame-Options防御:由微软提出来的防御界面操作劫持的一种方法,Web开发人员可以在HTTP响应头中加入一个X-Frame-Options头,浏览器会根据X-Frame-Options字段中的参数来判断页面是否可以被iframe嵌入;2.Frame Busting脚本防御:使用JavaScript脚本来对页面进行控制,达到页面无法被iframe嵌入的目的,这样的防护脚本被称为Frame Busting脚本;3.使用token进行防御:在业界主流的防御界面操作劫持攻击的方法中,似乎并没有提及防御CSRF中的token也可以对其进行防御;);X-Frame和Frame Busting方法都可以做到对界面操作劫持的防御。相对而言,X-Frame-Options的方式还是比Frame Busting更安全。X-Frame-Options是在浏览器中嵌入的,而Frame Busting是脚本控制。这意味着JavaScript代码始终有被突破的可能性;

10.3.用户的防御

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/733aada54040dbf995fb8a037614d625.html