防范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. 部署一个flask服务记录

    最近使用flask写了一些简单的服务. 服务部署到服务器上进行使用,这个过程会有一些问题,需要进行记录一下. 说明运行的环境情况.使用的是python3.6的虚拟环境,系统是centos7,其他的有u ...

  2. Flask 数据库迁移

    在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中. ...

  3. jquery mobile 动态加载标签时,无法正常展示样式

    原因 在chrome中审查元素,发现其增加了很多没有直接写在页面上的标签和样式.页面标签首先经过jquery.mobile-1.4.5.min.js的处理,添加了许多标签,然后再用css布局 解决方案 ...

  4. 对于SQL Server 2008删除或压缩数据库日志的方法

    由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400M的数据库居然有4G的LOG文件,严重占用了磁盘空间.由于主要是做OLAP,所以数据库本身不会有大变动,所以日志也就没有 ...

  5. C 扩展库 - sqlite3 API CRUD

    CRUD struct student typedef struct STUDENT { unsigned int id; unsigned char name[16]; unsigned int a ...

  6. URL重写html后Html文件打不开解决办法

    1.首先照旧在网站配置的应用程序扩展名映射中添加扩展名.html映射到aspnet_isapi.dll,是否存在不选: 2.在web.config文件中<compilation>节点下添加 ...

  7. JDK1.7新特性(3):java语言动态性之脚本语言API

    简要描述:其实在jdk1.6中就引入了支持脚本语言的API.这使得java能够很轻松的调用其他脚本语言.具体API的使用参考下面的代码: package com.rampage.jdk7.chapte ...

  8. OC weak strong __weak __strong copy retain assign nonatomic atomic等关键字的总结

    weak和strong的区别: weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它. 一旦最后一个strong型指针离去 ...

  9. 503 Service Unavailable

    转自:https://jingyan.baidu.com/article/6b1823099a258eba58e15902.html 第一 服务是不是被关闭了. 第二 原因IIS设置最大并发连接数 网 ...

  10. spring data jpa(一)

    第1章     Spring Data JPA的快速入门 1.1   需求说明 Spring Data JPA完成客户的基本CRUD操作 1.2   搭建Spring Data JPA的开发环境 1. ...