Web 漏洞分析与防御之 XSS(一)
原文地址:Web 漏洞分析与防御之 XSS(一)
博客地址:http://www.extlight.com
一、全称
跨站脚本攻击(Cross Site Scripting)
二、原理
通过在网站中的输入框写入 script 脚本或引入 script 文件,如果网站未过滤输入内容,将会解析该脚本。
如果脚本的功能是获取网站的 cookie,cookie 中又保留一些敏感信息,则后果有可能很严重。
三、类型
反射型攻击:脚本当作 url 的参数进行注入执行
存储型攻击:脚本被存储到 DB 后,读取时被解析执行
四、注入点
4.1 HTML 节点
页面代码:
<div>${content}</div>
content 的内容为 <script>alert(1)</script>,脚本攻击后,会变成:
<div><script>alert(1)</script></div>
页面将会执行 alert(1)。
4.2 HTML 属性
页面代码:
<img src="${imgSrc}" />
imgSrc 的内容为 2" onerror="alert(2),脚本攻击后,会变成:
<img src="2" onerror="alert(2)" />
页面将会执行 alert(2)。
4.3 Javascript 代码
<script>
var mydata = "${data}";
</script>
data 的内容为 hello";alert(3);",脚本攻击后,会变成:
<script>
var mydata = "hello";alert(3);"";
</script>
页面将会执行 alert(3)。
4.4 富文本
富文本需要保留 HTML 文本,HTML 文本中就有 XSS 攻击的风险。
五、防御
浏览器自带一些防御能力,但只能防御 XSS 反射类型攻击,且只能防御上文描述的前二个注入点。
防御手段原理也很简单,就是将可能会执行脚本的标签或属性进行转义和过滤。
5.1 HTML 节点的防御
将 < 和 > 转义成 <; 和 >;。
5.2 HTML 属性的防御
将 " 转义成 &quto;。
5.3 Javascript 代码的防御
将 " 转义成 \“ 。
5.3 富文本的防御
使用白名单保留部分标签和属性。
需要前端第三方工具:cheerio。
案例:
function xssFilter(html) {
var cheerio = require("cheerio");
var $ = cheerio.load(html);
// 白名单列表,key:标签,value:属性
var whiteList = {
"img":["src"],
"a":["href"],
"font":["color","size"]
};
// html 的遍历所有元素
$("*").each(function(index,elem) {
// 删除不在白名单的标签
if (!whiteList[elem.name]) {
$(elem).remove();
return;
}
// 删除不在白名单的标签的属性
for (var attr in elem.attribs) {
if (whiteList[elem.name].indexOf(attr) == -1) {
$(elem).attr(attr,null);
return;
}
}
});
return $.html();
}
还有另一种第三方工具,名字就叫 xss
Web 漏洞分析与防御之 XSS(一)的更多相关文章
- Web 漏洞分析与防御之点击劫持(三)
原文地址:Web 漏洞分析与防御之点击劫持(三) 博客地址:http://www.extlight.com 一.全称 点击劫持,顾名思义,用户点击某个按钮,却触发了不是用户真正意愿的事件. 二.原理 ...
- Web 漏洞分析与防御之 CSRF(二)
原文地址:Web 漏洞分析与防御之 CSRF(二) 博客地址:http://www.extlight.com 一.全称 跨站请求伪造(Cross-site Request Forgery) 二.原理 ...
- WEB漏洞 XSS(一)
1.xss的形成原理 xss 中文名是“跨站脚本攻击”,英文名“Cross Site Scripting”.xss也是一种注入攻击,当web应用对用户输入过滤不严格,攻击者写入恶意的脚本代码(HTML ...
- web前后端分离漏洞分析防御
web前后端分离漏洞分析防御 漏洞分析,主要漏洞有 一.跨站脚本攻击XSS 程序 + 数据 = 结果:攻击后,数据夹杂一部分程序(执行代码),导致结果改变: 1.XSS攻击注入点 (a):HTML节点 ...
- Java Web开发 - 持久型/存储型XSS漏洞
Java Web开发 - 持久型/存储型XSS漏洞 1.什么是XSS漏洞攻击? XSS是跨站脚本攻击(Cross Site Scripting)的简称,之所以叫XSS而不是CSS相比大家都能明白了吧, ...
- 三位一体的漏洞分析方法-web应用安全测试方法
本文转自乌云知识库 0x00 前言 节选自: http://www.owasp.org.cn/OWASP_Conference/owasp-20140924/02OWASPWeb20140915.pd ...
- 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析
帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析 一.漏洞描述 该漏洞是由于javascript获取url的参数,没有经过任何过滤,直接当作a标签和img标签的href属性和src属性输 ...
- 帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析
帝国CMS(EmpireCMS) v7.5 后台XSS漏洞分析 一.漏洞描述 该漏洞是由于代码只使用htmlspecialchars进行实体编码过滤,而且参数用的是ENT_QUOTES(编码双引号和单 ...
- web漏洞-命令执行、文件上传、XSS
一.命令执行 1:什么是命令执行? 命令执行漏洞是指攻击者可以随意执行系统命令.属于高危漏洞之一任何脚本语言都可以调用操作系统命令. 应用有时需要调用一些执行系统命令的函数,举个例子如:PHP中的 ...
随机推荐
- IOS UI-模态视图
一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展⽰出来 Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为⽌ ...
- mysql和SqlServer 中取得汉字字段的各汉字首字母
mysql 中取得汉字字段的各汉字首字母 这个转载于http://blog.csdn.net/lky5387/article/details/11973721 DELIMITER ;;CREATE ...
- 【河南省第十一届ACM程序设计大赛-A】计划日
已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 输入 第一行: T 表示以下有T组测试数据 ...
- hdu 2818 Building Block(并查集,有点点复杂)
Building Block Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- python3 堆排序
思路: 1.建立堆 2.得到堆顶元素,为最大元素 3.去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整重新使堆有序. 4.堆顶元素为第二大元素. 5.重复步骤3,直到堆变空. 动画 代码: de ...
- LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- js 验证对象是否为数组
一.方法一:用到了原型 由于typeof检测数组,只会显示其为object,并不会详细到告诉我们是否为array,所以我们可以自己写个js用原型来检测: <script> /** * * ...
- Code Cache相关知识总结
codecache代码缓存区,主要存放JIT所编译的代码,同时还有Java所使用的本地方法代码也会存储在codecache中.不同的jvm.不同的启动方式codecache的默认值大小也不尽相同. J ...
- 理解 uncaughtException 和 domain 和 try catch 区别
文章 实践 uncaughtException 捕获的是全局的异常, 反应慢, 每个回调完成后才发出异常, 书写也麻烦 domain 可以捕获每个异常, 及时反馈, 并且书写简洁 但他们两个捕获的异常 ...
- Python自定义大小截屏
蝈蝈这两天正忙着收拾家当去公司报道,结果做PHP的发小蛐蛐找到了他,说是想要一个可以截图工具. 大致需要做出这样的效果. 虽然已经很久不写Python代码了,但是没办法,盛情难却啊,只好硬着头皮上了. ...