XSS 和 CSRF
感谢《码农翻身》的文章让我深刻记住这两种攻击方式。
1、《浏览器家族的安全反击战》
2、 《黑客三兄弟》
3、 《黑客三兄弟续》
下面是我的整理内容:
目录
盾:JS 同源策略 {protocol, host, port}
矛:JS 假造登录框 获取账号密码(登录页面咋注入js呢?)
矛与盾教量:
矛:利用js获取其他网站的cookie
盾:JS 同源策略 {protocol, host, port}
所谓的 同源 是指域名、协议、端口号 相同。不同的客户端脚本(javascript,ActionScript)在没有授权的情况下,不能读取对方资源。简单来说,浏览器允许包含在页面A的脚本访问第二个页面B的数据资源,这一切是建立在A和B页面是同源的基础上。
- html 嵌入式也是同源(<img> <script>)
- 一级域名相同(www.shanjun.wang与code.shanjun.wang 同源)
不过cookie的domain一定要设置为那个一级域名才可以,例如:”
document.cookie = 'test=true;path=/;domain=store.com'
- AJAX 白名单 跨域请求 需要服务端配合
// 指定允许其他域名访问
response.setHeader("Access-Control-Allow-Origin", "*");
矛:JS 注入
例如: 在文本输入框中注入js (存储型XSS)
盾:cookie 添加 HttpOnly 属性 禁止js 读取
response.setHeader(
"Set-Cookie"
, "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");
矛:JS 假造登录框 获取账号密码(登录页面咋注入js呢?)
盾:过滤,转义
- 对输入内容过滤 将特定字符去掉 :给Servlet加Filter。
- 对输出内容编码转义
矛:跨站请求伪造CSRF
假网站伪造一个真网站的请求。在假网站做一个图片链接,不用用户点击自动请求转账链接
盾: from 请求加入随机数(token)
(现在Gmail支持多个tab同时持有多个SessionID) 后台对参数进行校验,实际操作看这个:SpringMVC如何防御CSRF
HTTP Referer字段验证: 验证referer和当前网站(request.getScheme())+”://”+request.getServerName())是不是一个网站。
有时间我会做一个模拟实验。有时间。。。。。。