XSS转码 && struts2 property标签的bug
struts2:
<s:property value="name" escape="false"/>
EL表达式:
jsp 2.0中的 ${todo.description}是不能防止xss的,如果输入脚本就可能导致xss攻击。
解决方法:
这种表达式只能用作tag的属性,而不能显示,
使用<c:out value="${todo.description}"/>就可以自动escapeXml。或者使用${fn:escapeXml(todo.description)}
如果想不escape,使用<c:out value="${todo.description}" escapeXml="false"/>
原文链接:http://blog.csdn.net/d8111/article/details/45249805
一。了解背景
下面两张图,比较html转义和js的转义。
一定要区分清楚的是,内容回写页面,一定要做的是JS转义!!而不仅仅是html转义


从上面两张图可以看出,js里面需要转义到的 单引号',反斜杠\ 均不在html转义字符之列!(如果针对XSS的话,只要对
<
>
'
")
二。<s:property value="xx"/>的稀烂之处
1.这个标签默认是带了html转义的,即完全等同于<s:property value="name" escape="true"/>
2.正确XSS防范做法,应该是后台转义后存储,也就是说存到DB里面的数据,就应该是处理过的!(这里的转义是html&js的综合体):
- map.put('<', "<");
- map.put('>', ">");
- map.put('\'', "'");
- map.put('\"', """);
- map.put('&', "&");
在DB层无sql注入防范的时候,甚至需要是三位一体!
拿上面那个例子来说,用户输入name,DB应该存储下面的内容
- <script>alert('xss')</script>
但是很不幸,这串字符使用s:property直接输出到页面上,会因为&符号又会促发一次html escape,导致显示问题

这里就只能继续恶心一把了,每个标签写上:<s:property value="name" escape="false"/> ,徒劳耗费键盘。(这种安全的内容回写比较推荐使用${name}的ongl方式直接输出)
三。严防死守
1.org.springframework.web.util.HtmlUtils, spring自带了一个类来处理,其本质需要注意,基于Char的过滤
看看源代码应该很容易理解
- StringBuffer escaped = new StringBuffer(input.length() * 2);
- for (int i = 0; i < input.length(); ++i) {
- char character = input.charAt(i);
- String reference = characterEntityReferences.convertToReference(character);
- if (reference != null) {
- escaped.append(reference);
- }
- else {
- escaped.append(character);
- }
a.使用String.replace(xx)的方式是搞不定的。举例来说,字符j的表示方式有下面15种之多:
- \6A\06A\006A\0006A\00006A //java形式的16进制编码
- jjjjj //十 进制编码
- jjjjj //十 六进制编码
b.使用html的过滤方式也是99% OK的,但是像mhtml这样的漏洞,还需要过滤%0d%0a
c.指望过滤<>,过滤scrpit串这些明文,也是靠不住的。
附件是查资料找到的文档,包括:强烈建议一睹为快
1.浅析XSS(Cross Site Script:跨站式攻击)漏洞原理(转)
2.Ajax hacking with XSS
介绍了诸如此类的注入方式,属于眼界开阔篇
- <img src="javascript:alert('XSS');">示例:
- <img src="javascript:alert('XSS');"> //10进制转码 如图三
- <img style="xss:expr/*XSS*/ession([code])"> //css的注释符号 为/**/,其中的内容会被忽略
- <style>@im\port'\ja\vasc\ript:alert("XSS")';</style> //css中忽略的符号还有“\”
~~~~~~~~~~~~~~分割~~~~~~~~~~~~~~
p.s.
1.用Jquery的text()取"<script>alert('xss')</script>",会被直接读成<script>alert('xss')</script> 。
2. 这个串如果直接使用$("#xxyy").html()输出,会产生alert框。
3.正确的做法是使用innerHTML函数,可以避免字符串中js被执行:document.getElementById("xxyy").innerHTML=
XSS转码 && struts2 property标签的bug的更多相关文章
- struts2 <s:property/>标签的使用--输出时间格式转换
转载地址http://hi.baidu.com/nonyi_com/blog/item/acf1b8d74b6cf63e07088bc4.html 最近在使用struts2的<s:propert ...
- struts2<s:property />标签
struts2的<property />标签是输出标签 其value属性是指定输出的内容,如果value属性没有写出来,则默认输出对象栈栈顶的元素. 例如,我们在对象栈中添加一个Perso ...
- struts2使用jsp和<s:property>标签获取json格式的返回数据
struts2使用jsp和<s:property>标签获取json格式的返回数据 1.struts2的action中 return "success"; 2.指向的返回 ...
- Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。
Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...
- js使用s:property标签接收json格式数据
js使用s:property接收json数据时,会出现字符被转译的错误. 错误如下: 引号会被转译成'"'字符,导致解析不了. 错误原因: html的s:property接收不会出错,而js ...
- 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...
- Struts2框架之-Struts2的标签
Struts2包含哪些标签? 解答: A: <s:a href=”"></s:a>—–超链接,类似于html里的<a></a> <s:a ...
- Struts2常用标签
Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的 ...
- Struts2的标签库(四)——数据标签
Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...
随机推荐
- HDU5438--Ponds (拓排+BFS)
点击打开链接 题意:给定n个池塘,m对池塘相连,现在要将与少于2个池塘相连的池塘拆除,形成森林,求节点数为奇数的树权值之和 思路:按照拓排的思想不断删除度数小于2的节点 #include<bit ...
- 3、C#基础整理(语句概述)
语句 语句分为四个大类: * 分支语句:if,if... else,if ...else if... else,switch case * 循环语句:for,while,do while,foreac ...
- magento -- 给后台分类管理页的分类商品加一栏商品类型
当使用特定分类来控制前台的商品显示时,后台分类管理页的分类商品只有编号.名称.SKU和价格这几栏,选择特定商品相当不便. 可以在这里多加一栏商品类型用来筛选商品,添加的方式很简单. 打开文件/app/ ...
- Day09_面向对象第四天
1.多态的概念和前提(掌握) 1.概念-什么是多态(掌握) 对象在不同时刻表现出来的不同状态. 2.针对引用类型的理解 编译期间状态和运行期间状态不一样 比如 ...
- Think Python - Chapter 16 - Classes and functions
16.1 TimeAs another example of a user-defined type, we’ll define a class called Time that records th ...
- 哈夫曼树(Huffman Tree)与哈夫曼编码
哈夫曼树(Huffman Tree)与哈夫曼编码(Huffman coding)
- Oracle 12C RAC的optimizer_adaptive_features造成数据插入超时
问题分析 使用10046事件追踪方式,直接生成上传时的数据库事件日志进行分析,发现主要区别在于以下两条sql语句在每次长时间上传时都有出现,并且执行用户不是上传用户,而是数据库SYS用户. ***** ...
- ZPPR016-在制品清单报表
*&---------------------------------------------------------------------**& Report ZPPR016*&a ...
- c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;
网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...
- jquery的ajax异步请求接收返回json数据
http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...