防范XSS有三道防火墙:数据的输入校验,数据输出Encode,浏览器安全(主要就是CSP),这里主要介绍Encode。

#用于XSS防范的Encode

用户防范XSS的Encode主要有三种:HtmlEncode,javascriptEncode,urlEncode。每种encode都有不同的使用场景。

#HtmlEncode

HtmlEncode将一些字符编码为html实体,比如将 <   编码为  &lt;  这样编码会起到什么效果呢?

假设页面代码如下:

<div>${var}</div> 

如果var的值被注入了恶意代码 <script>alert(1)</script>,我们知道页面返回的时候会直接弹出一个alert框,而如果对var的值进行htmlEncode后页面代码就变成了:

<div>
&lt;script&gt;alert(1)&lt;/script&gt;
</div>

浏览器选后不会弹出alert框,而是将<script>alert(1)</script>显示为纯字符。
数据在标签或属性中输出时使用。

#javascriptEncode

使用“\”对特殊字符进行转义,除数字,字母之外,小于127的字符编码使用16进制“\xHH”的方式进行编码,大于127用unicode。

假设页面中有如下脚本片段:

    <script>
var j="${var}"
</script>

假设var被恶意注入为  ";alert(1);//

    <script>
var j="";alert(1);//
</script>

这样页面又会弹出一个alert框,而如果对  ";alert(1);//  进行javascriptEncode,则变为下面这样,不会产生注入影响

    <script>
var j="\"\x3balert\x281\x29\x3b\x2F\x2F"
</script>

数据在脚本中输出或者在事件中输出时要使用javascriptEncode

#urlEncode

urlEncode可以对中文以及特殊字符进行编码,数据在url类型输出时要使用urlEncode,比如href,src

www.abc.com?name=<script>alert('钓鱼岛')</script>

对上面这句urlEncode之后就变成了:

www.abc.com%3fname%3d%3cscript%3ealert(%27%e9%92%93%e9%b1%bc%e5%b2%9b%27)%3c%2fscript%3e

#为何Encode可以起作用?

htmlEncode可以防止恶意的标签闭合

JavaScriptEncode可以防止引号闭合

urlEncode可以防止标签闭合同时支持中文输入

1)攻击一般就是通过构造一个js可执行环境或者在既有的js可执行环境里来执行恶意脚本。去除了恶意的标签闭合和引号闭合就可以有效的防止恶意脚本的注册(有些并不是立即执行)和执行。
2)Encode让浏览器把用户输入作为数据本身而不是作为可执行的代码。
3)Encode必须用在适当的位置,否则会破坏正常的语义。

XSS防范之Encode(转)的更多相关文章

  1. 【超精简JS模版库/前端模板库】原理简析 和 XSS防范

    使用jsp.php.asp或者后来的struts等等的朋友,不一定知道什么是模版,但一定很清楚这样的开发方式: <div class="m-carousel"> < ...

  2. XSS 防范XSS 攻击的措施

    XssSniper--0KEE TEAM               XssSniper--0KEE TEAM XssSniper 扩展介绍 一直以来,隐式输出的DomXSS漏洞难以被传统的扫描工具发 ...

  3. jsonp接口的xss防范

    防范方式也很简单,只要在header里输出类型设置为javascript即可: 1 header('Content-type: text/javascript;charset=utf-8');

  4. XSS原理及防范

    Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码.比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cook ...

  5. CSRF与XSS攻击的原理与防范

    CSRF 1.概念与原理 CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统.例如: 用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网 ...

  6. ASP.NET MVC防范CSRF最佳实践

    XSS与CSRF 哈哈,有点标题党,但我保证这篇文章跟别的不太一样. 我认为,网站安全的基础有三块: 防范中间人攻击 防范XSS 防范CSRF 注意,我讲的是基础,如果更高级点的话可以考虑防范机器人刷 ...

  7. 转Web安全测试之XSS

    转http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html XSS 全称(Cross Site Scripting) 跨站脚本攻击 ...

  8. xss之全面剖析

    XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的 ...

  9. Web安全测试之XSS

    Web安全测试之XSS XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此 ...

随机推荐

  1. Mac下使Iterm2开机启动不显示界面

    一.在登录项上添加Iterm2的启动项 二.打开Iterm2 1.启动后会显示Iterm2,此时点击关闭按钮,保证桌面上没有任何的控制台窗口. 2.按[Command]+[Shift]+[S],保存名 ...

  2. (转)调优 DB2 UDB v8.1 及其数据库的最佳实践

    原文:https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0404mcarthur/index.html 简介 性能是 ...

  3. R302指识别开发笔记

    一.相关概念 1.存储容量:500枚指纹,地址范围0-499. 2.用户记事本:模块内部为用户开辟了512Bytes的FLASH空间用于存放用户数据该存储空间称为用户记事本,该记事本逻辑上被分成16个 ...

  4. Spring Boot的Controller控制层和页面

    一.项目实例 1.项目结构 2.项目代码 1).ActionController.Java: package com.example.controller; import java.util.Date ...

  5. js解决千分符问题

    js脚本function: //js数字千分符处理 function commafy(num) { num = num + ""; var re = /(-?\d+)(\d{3}) ...

  6. 深度学习(八) Batch Normalization

    一:BN的解释:  定义: 顾名思义,batch normalization嘛,就是“批规范化”咯.Google在ICML文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的act ...

  7. OSGi是什么:Java语言的动态模块系统(一)

    OSGi是什么 OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构.OSGi容器已有多家开源实现,比如Knoflerfish.Equinox和Apache的Felix.您 ...

  8. 使用Jasperreporter生成入库出库单打印等报表操作

    项目需要打印报表:就是那种生成入库单,出库单等的操作.使用到的技术:使用iReport Designer5.1.0设计报表,使用struts2+jasperreporter生成最终填充数据的报表 首先 ...

  9. Mysql命令行访问

    mysql -h localhost  -u root -p12345 mysql -h 192.168.1.100  -u root -p12345 mysql -h 192.168.1.100  ...

  10. CSS选择器详解(二)通用选择器和高级选择器

    目录 通用选择器 高级选择器 子选择器 相邻兄弟选择器 属性选择器 通用选择器 通用选择器可以选择页面上的所有元素,并对它们应用样式,用 * 来表示. 语法: * { property1: value ...