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的综合体):

  1. map.put('<', "&lt;");
  2. map.put('>', "&gt;");
  3. map.put('\'', "'");
  4. map.put('\"', "&quot;");
  5. map.put('&', "&amp;");

在DB层无sql注入防范的时候,甚至需要是三位一体!

拿上面那个例子来说,用户输入name,DB应该存储下面的内容

  1. &lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;

但是很不幸,这串字符使用s:property直接输出到页面上,会因为&符号又会促发一次html escape,导致显示问题

这里就只能继续恶心一把了,每个标签写上:<s:property value="name" escape="false"/> ,徒劳耗费键盘。(这种安全的内容回写比较推荐使用${name}的ongl方式直接输出)

三。严防死守

1.org.springframework.web.util.HtmlUtils, spring自带了一个类来处理,其本质需要注意,基于Char的过滤

看看源代码应该很容易理解

  1. StringBuffer escaped = new StringBuffer(input.length() * 2);
  2. for (int i = 0; i < input.length(); ++i) {
  3. char character = input.charAt(i);
  4. String reference = characterEntityReferences.convertToReference(character);
  5. if (reference != null) {
  6. escaped.append(reference);
  7. }
  8. else {
  9. escaped.append(character);
  10. }

a.使用String.replace(xx)的方式是搞不定的。举例来说,字符j的表示方式有下面15种之多:

  1. \6A\06A\006A\0006A\00006A            //java形式的16进制编码
  2. &#106;&#0106;&#00106;&#000106;&#0000106;           //十 进制编码
  3. jjjjj           //十 六进制编码

b.使用html的过滤方式也是99% OK的,但是像mhtml这样的漏洞,还需要过滤%0d%0a

c.指望过滤<>,过滤scrpit串这些明文,也是靠不住的。

附件是查资料找到的文档,包括:强烈建议一睹为快

1.浅析XSS(Cross Site Script:跨站式攻击)漏洞原理(转)

2.Ajax hacking with XSS

 

介绍了诸如此类的注入方式,属于眼界开阔篇

  1. <img src="javascript:alert('XSS');">示例:
  2. <img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59"> //10进制转码 如图三
  1. <img style="xss:expr/*XSS*/ession([code])">            //css的注释符号 为/**/,其中的内容会被忽略
  2.   <style>@im\port'\ja\vasc\ript:alert("XSS")';</style>            //css中忽略的符号还有“\”

~~~~~~~~~~~~~~分割~~~~~~~~~~~~~~

p.s.

1.用Jquery的text()取"&lt;script&gt;alert('xss')&lt;/script&gt;",会被直接读成<script>alert('xss')</script> 。

2. 这个串如果直接使用$("#xxyy").html()输出,会产生alert框。

3.正确的做法是使用innerHTML函数,可以避免字符串中js被执行:document.getElementById("xxyy").innerHTML=

XSS转码 &amp;&amp; struts2 property标签的bug的更多相关文章

  1. struts2 <s:property/>标签的使用--输出时间格式转换

    转载地址http://hi.baidu.com/nonyi_com/blog/item/acf1b8d74b6cf63e07088bc4.html 最近在使用struts2的<s:propert ...

  2. struts2<s:property />标签

    struts2的<property />标签是输出标签 其value属性是指定输出的内容,如果value属性没有写出来,则默认输出对象栈栈顶的元素. 例如,我们在对象栈中添加一个Perso ...

  3. struts2使用jsp和<s:property>标签获取json格式的返回数据

    struts2使用jsp和<s:property>标签获取json格式的返回数据 1.struts2的action中 return "success"; 2.指向的返回 ...

  4. Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

    Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...

  5. js使用s:property标签接收json格式数据

    js使用s:property接收json数据时,会出现字符被转译的错误. 错误如下: 引号会被转译成'"'字符,导致解析不了. 错误原因: html的s:property接收不会出错,而js ...

  6. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  7. Struts2框架之-Struts2的标签

    Struts2包含哪些标签? 解答: A: <s:a href=”"></s:a>—–超链接,类似于html里的<a></a> <s:a ...

  8. Struts2常用标签

    Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的 ...

  9. Struts2的标签库(四)——数据标签

    Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...

随机推荐

  1. HDU 4902 (线段树)

    Problem Nice boat(HDU 4902) 题目大意 维护一个序列,两种操作. 第一种操作,将一段区间[l,r]赋值为x. 第二种操作,将一段区间[l,r]中大于等于x的数与x求gcd. ...

  2. HDU 5001

    http://acm.hdu.edu.cn/showproblem.php?pid=5001 每次去掉要算的点,求出到达其他点的概率,就是不能到达这个点的概率 开始想去算到达这个点的概率,再去减,不过 ...

  3. Smart210学习记录-------Linux设备驱动结构

    cdev结构体 1 struct cdev { 2 struct kobject kobj; /* 内嵌的 kobject 对象 */ 3 struct module *owner; /*所属模块*/ ...

  4. css 中input和select混排对齐问题

    当INPUT.SELECT及用图片做的button放在一起(并排放一起)时,没法子对齐,一个vertical-align:middle就可搞定.

  5. 怎样查看python的api

    python -m pydoc -p 4567 python -m pydoc表示打开pydoc模块,pydoc是查看python文档的首选工具: -p 4567表示在4567端口上启动server; ...

  6. 虚拟化_KVM

    一.KVM介绍 1.KVM全称kernel vitual machine,是针对包含虚拟化扩展(InterVT或AMD-V)的x86硬件上的完全原生的虚拟化解决方案 2.KVM是以色列Qumranet ...

  7. UVa 489 HangmanJudge --- 水题

    UVa 489 题目大意:计算机给定一个单词让你猜,你猜一个字母,若单词中存在你猜测的字母,则会显示出来,否则算出错, 你最多只能出错7次(第6次错还能继续猜,第7次错就算你失败),另注意猜一个已经猜 ...

  8. spark中streamingContext的使用详解

    两种创建方式 val conf = new SparkConf().setAppName(appName).setMaster(master);val ssc = new StreamingConte ...

  9. Android仿计算器界面

    代码如下: <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android ...

  10. 课堂所讲整理:输入输出流(I/O)2(修改版)

    package org.hanqi.ex; import java.io.*; public class TestFile2 { public static void main(String[] ar ...