原文地址: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 节点的防御

将 < 和 > 转义成 &lt; 和 &gt;。

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

最新文章

  1. Eclipse迁移到Android studio步骤如下:
  2. js MATH
  3. HOLOTOOLKIT的使用
  4. Python的禅,“提姆彼得斯”说的非常有道理道出了这门编程语言的真谛!
  5. Array-练习-自定义功能
  6. 分享一个自己用的Objective-C的Http接连类
  7. Oracle 存储过程实例2
  8. 使用nodejs搭建服务器显示HTML页面
  9. PHP程序异常处理实现方法
  10. 使用js对select动态添加和删除OPTION示例代码
  11. caffe:使用C++来提取任意一张图片的特征(从内存读取数据)
  12. 个人从源码理解JIT模式下angular编译AppModule的过程
  13. 0_Simple__simpleAtomicIntrinsics + 0_Simple__simpleAtomicIntrinsics_nvrtc
  14. WPF ListBox 获取listBoxItem
  15. Swift基础之如何使用iOS 9的Core Spotlight框架
  16. redis删除所有key
  17. R语言学习 第十篇:操作符
  18. 【题解】Luogu P4396 [AHOI2013]作业
  19. py-day4-2 python 内置函数
  20. 通过项目逐步深入了解Mybatis&lt;一&gt;

热门文章

  1. yii控制布局方式
  2. spring注入的四种方式
  3. day32 Python与金融量化分析(二)
  4. python之阶乘的小例子
  5. Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。
  6. vue.js 源代码学习笔记 ----- 工具方法 debug
  7. jfc在jsp页面画图,不将图片存在服务器端,只存入会话session(可用)
  8. FairyGUI编辑器制作Unity3D UI值得借鉴
  9. Android 框架学习3:从 EventBus 中学到的精华
  10. Compass入门