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的处理结果包含到此页面中来 ...
随机推荐
- Sheet can not be presented because the view is not in a window的解决办法,和window的简单使用
Sheet can not be presented because the view is not in a window,顺便在stackoverflow上找了答案,希望能给大家带来帮助,在此感谢 ...
- 程序员是怎么炼成的---OC题集--练习答案与题目(3)
1.init 2.initWithBytes:length:encoding: 3.initWithCharacters:length: 4.initWithCString:encoding: 5.i ...
- LCA(Tarjan)
program LCA(Tarjan); type arr=record u,v,w,next:longint; end; ; maxm=; ..maxm*] of arr; last,lasq,an ...
- 20135214万子惠 (2)——-Java面向对象程序设计
实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 (一)单元测试 (1) 三种 ...
- linxu fcntl 函数用法 【转】
功能描述:根据文件描述词来操作文件的特性. 文件控制函数 fcntl -- file control 头文件: #include <fcntl.h>; i ...
- HTML-day-1-HTML基础知识
HTML基础知识 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- iOS学习笔记---c语言第八天
指针 首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值.用来存放变量地址的变量,就称为"指针变量" int *p=nul ...
- c语言中函数的递归
题目:用递归法把一个整数转换成字符串输出. 比较下面两种方法的不同: putchar(n%10+'0')的位置不同,造成输出结果的不同. 方法一: #include <stdio.h> v ...
- bootStrap-2
全局样式: 1.移除Body的margin声明: 2.设置Body的背景色为白色: 3.为排版设置了基本的字体,字号和行高: 4.设置全局连接颜色,且当连接处于悬浮:hover状态时,才会显示下划线样 ...
- 正确答案 全国信息学奥林匹克联赛( ( NOIP2014) 复 赛 模拟题 Day1 长乐一中
[题目描述]小 H 与小 Y 刚刚参加完 UOIP 外卡组的初赛,就迫不及待的跑出考场对答案."吔,我的答案和你都不一样!",小 Y 说道,"我们去找神犇们问答案吧&qu ...