XSS 探索
1. 什么是XSS攻击?
正常的页面被渗出了攻击者的js脚本,这些脚本可以非法地获取用户信息,然后将信息发送到attacked的服务端。
XSS是需要充分利用输出环境来构造攻击脚本的
2. 危害
非法获取用户cookie、ip等内容
窃取用户输入的内容
劫持浏览器,形成DDOS攻击
3. 类型
- Reflected XSS:可以理解为参数型XSS攻击,攻击的切入点是url后面的参数
// 合法页面
url: http://aa.com?test=1234
<input type="text" value={test} /> // result is:
<input type="text" value="1234" /> // XSS攻击
url: http://aa.com?test=" /><script>alert('xss')</script>
<input type="text" value={test} /> // result is:
<input type="text" value="" /> <script> alert('xss')</script> /> - stored XSS: 将攻击js脚本上传到服务器端,每次输出时,也随着内容将脚本输出,这样js恶意脚本就可以起到攻击作用。
// input:
<textarea>
hello </div><script src="..."></script>
</textarea>
// 将hello及后面的内容一起提交到服务上 //输出上述内容
<div>
hello</div><script src="..."></script>
</div> - DOM based XSS:这种攻击方式也是通过URL的参数,但是需要了解正常js的DOM操作,将js脚本注入到页面中
<div id="inner"></div>
<script>
var ele = document.querySelector('#inner');
var search = window.location.search;
var age = getAge(search) // 获取search中age的内容
ele.innerHTML = age; // if url: aa.com?age=23
<div id="inner">23</div>
</script> // if url: aa.com?age=</div><script src="..."></script>
<div id="inner"></div><script src="..."></script> - 突变型XSS:是当不可信数据在DOM的innerHTML属性的上下文被处理并通过浏览器发生突变,导致变成一种有效的XSS方向的一种XSS漏洞
4.解决方案
- 对内容进行编码,包括server、client端均要进行编码。但是不同的内容,就需要采用不同的编码方式。
总体来讲需要对HTML、Attribute、js context、URL、style context、JSON分别进行编码处理。
对html内容进行过滤,例如html purifier、js-xss
X-XSS-Protection
IE8+以上的浏览器均支持该http header,目前goole里面已经添加该属性:
x-xss-protection:1; mode=block
- 监控跨站资源:针对csp中存在的问题,进行监控。FEX团队写了几篇非常好的文章:
content security policy(CSP): W3C和各大浏览器厂商均推荐和实践防御XSS的标准,限制执行、请求具有风险的外链资源,攻击者无法将目标信息传出,并对relected XSS进行防御。
在HTTP的response中部署CSP,指定资源白名单来限制浏览器访问未经允许的外部资源。
目前Google、facebook、twitter均支持该标准,例如twitter的配置信息:
content-security-policy:default-src https:;
connect-src https:; font-src https: data:;
frame-src https: twitter:; frame-ancestors 'self';
img-src https: blob: data:; media-src https: blob:;
object-src https:;
script-src 'unsafe-inline' 'nonce-w6FV5VZOKta+7JaW7PpR3A==' 'unsafe-eval' https:;
style-src 'unsafe-inline' https:;
report-uri https://twitter.com/i/csp_report?a=NVQWGYLXFVZXO2LGOQ%3D%3D%3D%3D%3D%3D&ro=false;上述配置的详细参数请参考CSP的相关规范,csp1.0,目前csp1.1草案已经出来。 然而,csp中不允许Eval、inline js、白名单获取远程脚本,这些阻碍着csp的推广。
Template Engine:对处理输出内容进行编码,放置恶意代码执行,对stored Xss进行防御。
例如经常使用handlebars就对输出的内容进行了编码:
Handlebars HTML-escapes values returned by a {{expression}}.
If you don't want Handlebars to escape a value,
use the "triple-stash", {{{. <div class="entry">
<h1>{{title}}</h1>
<div class="body">
{{{body}}}
</div>
</div> {
title: "All about <p> Tags",
body: "<p>This is a post about <p> tags</p>"
} result is as below: <div class="entry">
<h1>All About <p> Tags</h1>
<div class="body">
<p>This is a post about <p> tags</p>
</div>
</div>- Util Lib:提供安全的environment、Encode等工具,避免location、cookie封装对DOM based XSS工具。
首先在服务端端,对输出的内容进行编码,对request中的内容进行检查编码。
在客户端,对js获取的widow.location、document.cookie等信息也需要相应处理。
- 仅可能采用POST而非GET请求方式
- 严格检查refer
5.参考
https://developer.mozilla.org/zh-CN/docs/Web/Security/CSP
http://www.80sec.com/browser-hijacking.html
http://www.freebuf.com/articles/web/40520.html
http://www.freebuf.com/articles/web/42727.html
XSS 探索的更多相关文章
- 探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- Samy XSS Worm之源码讲解
说到Web安全和XSS跨站脚本技术,几乎所有的书都会提到Samy Worm,这是在2005年感染了mySpace社交网络上百万用户的蠕虫.正如Morris蠕虫是互联网第一个蠕虫, Samy Worm则 ...
- 组合拳出击-Self型XSS变废为宝
前言 作者:米斯特安全攻防实验室-Vulkey_Chen 博客:gh0st.cn 这是一个鸡肋性质的研究,也许有些标题党,请见谅- 本文启发于一些讨论,和自己脑子里冒出来的想法. 组合拳搭配 Self ...
- " XSS易容术---bypass之编码混淆篇+辅助脚本编写"
一.前言本文原创作者:vk,本文属i春秋原创奖励计划,未经许可禁止转载!很多人对于XSS的了解不深.一提起来就是:“哦,弹窗的”.”哦,偷cookie的.”骚年,你根本不知道什么是力量.虽然我也不知道 ...
- XSS事件(一)
前言 最近做的一个项目因为安全审计需要,需要做安全改造.其中自然就包括XSS和CSRF漏洞安全整改.关于这两个网络安全漏洞的详细说明,可以参照我本篇博客最后的参考链接.当然,我这里并不是想写一篇安 ...
- 从零学习安全测试,从XSS漏洞攻击和防御开始
WeTest 导读 本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础.XSS基础.编码基础.XSS Payload.XSS攻击防御. 第一部分:漏洞攻防基础知识 XSS属于漏洞攻防,我们要研究 ...
- XSS漏洞之加载远程js文件
这次在对一个系统渗透测试过程中,发现一个XSS漏洞,可弹窗,并且没有httponly 但是在尝试加载远程js文件的时候发现,script标签被过滤掉了,准确的说应该是服务器后端在识别到输入内容有< ...
- 2019-11-20:xss学习笔记
xxe漏洞防御使用开发语言提供的禁用外部实体的方法phplibxml_disable_entity_loader(true); 卢兰奇对象模型,bom由于现代浏览器实现了js交互性方面的相同方法和属性 ...
- 探索ASP.NET MVC5系列
探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session) 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存) 探索ASP.NET MV ...
随机推荐
- 第十章实践——系统级I/O代码运行
第十章实践——系统级I/O代码运行 实验代码清单如下: 1. cp1——复制一个文件到另一个文件中(两个已经存在的文件) 复制前: 执行后结果 2. setecho.echostate——改变.显示输 ...
- Android技能杂谈——如何优雅的处理控件的点击事件
首先分享一个最佳实践: 大家开发复杂一些的Android应用的时候常常会写一个BaseActivity或者BaseFragment,里面写上一些基本而公用的方法,比如监听网络状况.弹出对话框.设置ac ...
- 使用OneNote的COM组件,实现OCR功能。
背景 在业务系统开发的过程中,很多情况下会去识别图片中的相关信息,并且把信息录入到系统中.现在希望通过自动化的方式录入,就有了以下的工作.在对比了几个OCR软件在中文识别方面的准确率后,决定使用微软的 ...
- 《TCP/IP详解卷1:协议》第19章 TCP的交互数据流-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- [C#]AES加密算法实现
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...
- Javascript基础系列之(三)数据类型 (字符串 String)
javascript一共有9种数据类型 字符串 String 数值型 Number 布尔型 Boolean 未定义 Undefine 空值 Null 对象 Object 引用Refernce 列表型 ...
- AngularJS - 服务简介
服务是AngularJS中非常重要的一个概念,虽然我们有了控制器,但考虑到其生命实在脆弱,我们需要用到服务. 起初用service时,我便把service和factory()理所当然地关联起来了. 确 ...
- iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组
一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD的优势 G ...
- 教你一步一步实现一个Promise
Promise我想现在大家都非常熟悉了,主要作用就是解决异步回调问题,这里简单介绍下. Promise规范是CommonJS规范之一,而Promise规范又分了好多种,比如 Promises/A.Pr ...
- JSP基本原理
JSP的基本原理: jsp的本质是servlet.jsp通过在标准的HTML页面中嵌入java代码,其静态的部分无需Java程序控制,只有那些需要从数据库读取或需要 动态生成的的页面内容,才使用Jav ...