【开发运行之鹿鹿故事4】安全性之XSS简析

休息了两天,鹿鹿接到了亲戚的电话:‘歪,鹿鹿呀,为啥我最近搜啥,广告就给我推啥呢?是否是咱们上网干啥大家都知道啊,这可太可怕了!’
看着外面的鹅毛大雪,鹿鹿不由想来一段 窦娥冤 抒发悲愤。
仍是赶忙解释一下吧,免得误会愈来愈大。html


1. 首先咱们要明白一个概念 Cookies
官方解释:cookies中文名称为小型文本文件,指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(一般通过加密)。它知足RFC6265标准。

通俗来讲,就是做为用户的你每访问一个网站,这个网站就会存储一些你的用户信息(好比用户名、密码、浏览记录、IP地址之类的)到Cookies里,固然到底存什么取决于这个网站。
事实上:普通网站都不会存储重要的信息,它们仅仅存一个你的登录状态,也就是你拿用户名密码换取的令牌,还有就是网站针对你的断定(好比你在这个网站上的惟一标识是什么,你访问的是他们的哪台服务器,你使用的是哪一个版本的产品),这些信息你都不须要关心,它和你的隐私一点关系都没有。
一些安全的网站会将这些信息进行加密,目的是防止别人伪造这些信息欺骗网站。固然一些不太靠谱的网站仍是会在Cookie里存你的用户名密码的,这是极其不安全的,信息很快就会被泄露。前端


2. XSS(Cross Site Scripting)攻击

那亲戚是访问了那些自己不靠谱的网站吗?有可能,也不必定。
那别的网站是怎么攻击的呢?这实际上是一种常见的攻击--XSS 跨站脚本攻击web

举个栗子,某博客网站S上的某做者小黑写了一篇文章,而且偷偷插入一段 <script>代码,而后把文章发布。而后小白在网站S上去看这篇文章,这段代码开始执行,这段代码抓取小白的受权Cookie副本,因而小白的Cookie被获取到小黑的服务器,小黑获取到了小白的帐号信息。若是Cookie里有用户密码,那就很是危险了,不光是小白的浏览记录,它的财产安全也会受到威胁了。

固然这和攻击者目的有关,若是小白真的访问了乱七八糟的网站,输入了过多的我的信息,只能勒紧腰带自认倒霉了;可是多数大网站的Cookie没有用户密码更不会出售用户信息,顶多呢,是让小黑能够短期(Cookie会过时)内利用这个Cookie模拟下登录状态发个帖啥的。后端

咱们知道每次访问网站的时候浏览器都会将用户在该网站的Cookie发给网站服务器。浏览器

再举个栗子,小黑访问了一个网站A,网站A里有个来自某营销网站B的图片,图片中也植入了 <script>代码。小黑在浏览器访问这张图片的时候会提供网站B的Cookie,咦,哪来的网站B的Cookie?
小黑在访问网站A的时候,同时也以B用户的身份访问了B网站。“他也没在B网站注册啊,怎么会是B网站用户?” 嘿嘿,不用他注册,由于也不须要他知道,B网站是自动分配一个账户给小黑的,若是像A这样的网站多了,B网站想在不一样网站之间都能定位到小黑,怎么办?把分配给他的账户存在B的Cookie里就能够啦。那目的是啥呢?
B网站在拿到Cookie的同时,还获取到了网站A给他的一些信息,好比看了什么视频啊,新闻啊等等。其目的也是让营销网站B针对固定用户投放的广告更精准。
因而乎,以后小黑就能够在打开网页时,看到网站B根据本身以前的喜爱投放的广告了~

这就是鹿鹿的这位亲戚遭遇的来龙去脉啦~安全

上面就是跨站脚本攻击的原理和危害,它可能无处不在,只要有可能植入脚本的地方,就有它存在的可能。服务器


简单用代码演示一下,XSS究竟是怎么进行脚本注入的。
打开任意一个网站,执行如下代码:cookie

//方法一,添加script元素
var script = document.createElement('script');
script.textContent=alert(100);
//  马上就会在页面进行执行,弹出数字100,脚本注入成功
-------------------------------------------------
//方法二,设置script属性src,引入脚本的网络地址
var script = document.createElement('script');
//  设置文件地址
script.src = 'http://yiifaa.com/index.js'
//  还能够执行回调函数
script.onload = function() {
}
-------------------------------------------------
//方法二,经过document.write方法
// 注意对/符号的转义 \\/  
var script = '<script>alert(100)<\\/script>';
document.write(script);

那么怎么预防它呢?网络

  1. 前端替换关键字,例如替换<script><&lt>&gt。这样恶意代码都会被转义,再也不被浏览器执行。
  2. 后端替换,参考

好了,误会终于解除了,鹿鹿也保证在后续的工做中作好页面的安全性能,保护好你们的隐私!yii

相关文章
相关标签/搜索