`
sw1982
  • 浏览: 511216 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

XSS转码 && struts2 property标签的bug

阅读更多

一。了解背景

下面两张图,比较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('<', "&lt;");
map.put('>', "&gt;");
map.put('\'', "&#39;");
map.put('\"', "&quot;");
map.put('&', "&amp;");

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

 

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

&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的过滤

 

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

 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进制编码

&#106;&#0106;&#00106;&#000106;&#0000106;           //十 进制编码

&#x6A;&#x06A;&#x006A;&#x0006A;&#x00006A;           //十 六进制编码

 

 

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="&#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进制转码 如图三

 

<img style="xss:expr/*XSS*/ession([code])">            //css的注释符号 为/**/,其中的内容会被忽略

  <style>@im\port'\ja\vasc\ript:alert("XSS")';</style>            //css中忽略的符号还有“\”

 

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

p.s.

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

 

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

 

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


  • 大小: 53.1 KB
  • 大小: 46.9 KB
  • 大小: 5.2 KB
  • 大小: 5.5 KB
分享到:
评论
1 楼 高军威 2014-11-19  
<b>行不行</b>

相关推荐

    struts2标签使用例子

    在Struts2框架中,标签库是其一大特色,它提供了丰富的自定义标签,使得开发者能够更加便捷地创建动态页面。这些标签极大地简化了JSP页面的编写,提高了代码的可读性和可维护性。 1. **Struts2核心标签库**: - `s...

    XSS蠕虫&病毒--即将发生的威胁与最好的防御

    2. **高发频率**:由于传播所需的漏洞存在于超过80%的网站中,XSS蠕虫与病毒随时可能发生。 3. **传播速度**:它们的传播速度甚至超过了更为人所熟知的蠕虫病毒,如CodeRed、Slammer及Blaster。 4. **潜在危害**:...

    开发安全培训(XSS攻击&SQL;注入).pdf

    XSS攻击和SQL注入是两种常见的网络安全威胁。XSS攻击指的是恶意用户将恶意脚本代码注入到网页中,当用户浏览该网页时,这些恶意代码得以执行。XSS攻击可以分为反射型、存储型和DOM型三种。反射型XSS攻击通常发生在...

    JSP Struts过滤xss攻击的解决办法

    本方案采用struts2的拦截器过滤,将提交上来的参数转码来解决。 配置struts.xml extends=struts-default,&gt; &lt;!-- 配置拦截器 --&gt; &lt;!-- 定义xss拦截器 --&gt; 此处填写拦截器类名&gt;&lt;/interceptor&gt;

    struts2教程+struts标签中文API

    1. **XSS防护**:Struts2内置了防止跨站脚本攻击(XSS)的机制,如自动转义输出内容。 2. **CSRF防护**:通过Token机制防止跨站请求伪造攻击,保护用户数据安全。 3. **权限控制**:Struts2的拦截器可以实现细粒度的...

    留言板留言板struts2留言板struts2

    11. **安全考虑**:Struts2虽然强大,但也需要注意安全性问题,例如XSS、CSRF等。开发者应确保对用户输入进行校验和过滤,使用安全的插件,及时更新Struts2版本以修补潜在的安全漏洞。 以上就是关于"留言板留言板...

    struts2相关书籍

    它可能还会讲解如何调试Struts2应用,优化性能,以及安全问题,比如XSS和CSRF防护。 《Struts+2.pdf》: 书名中的"+"可能表示该书涵盖了Struts2的最新版本或与其他技术(如Spring、Hibernate)的结合。这可能涉及到...

    struts标签库学习

    - **增强安全性**:Struts标签库内置了安全机制,减少了XSS等安全风险。 **7. 学习Struts标签库的方法** - 阅读官方文档:Apache Struts官网提供了详细的标签库文档,解释了每个标签的功能、用法和属性。 - 实践...

    一个用struts2写的注册登录的页面

    9. **安全性**:理解防止SQL注入、XSS攻击等安全问题的重要性,以及如何在Struts2中实施相关防护措施。 10. **登录逻辑**:实现登录逻辑,包括用户名和密码的验证,以及登录失败后的反馈。 通过实践这个项目,...

    Struts2 2.3.24开发文档

    在安全性方面,Struts2提供了一套安全相关的拦截器,如Parameters拦截器可以进行参数过滤和类型转换,防止SQL注入和XSS攻击。然而,Struts2也曾经因为某些漏洞而引发过安全问题,因此开发者在使用时需要注意及时更新...

    struts2 bookstore 网上书店 jsp 课程设计

    我们可以通过使用Struts2的标签库(例如`s:property`、`s:form`等)来简化JSP页面的编写,这些标签能直接与Action中的属性进行交互,从而减少代码量并提高可维护性。 在课程设计中,网上书店可能包括以下几个主要...

    struts2框架模板

    - **创建JSP页面**:使用Struts2标签库,与Action进行数据交互。 6. **开发实践** - **Action的返回值**:Action执行后可以通过字符串返回值,决定跳转的Result类型。 - **OGNL表达式**:在视图层使用OGNL表达式...

    struts2介绍及应用

    Struts2是一个强大的Java Web应用程序框架,用于构建和维护可扩展、高效且易于维护的Web应用。它是Apache软件基金会下的一个开源项目,基于Model-View-Controller(MVC)设计模式,提供了高度灵活的控制层,使开发者...

    Struts2第七章商品展示

    - 视图部分通常使用JSP(JavaServer Pages)来呈现,Struts2提供了一系列标签库,如`s:form`、`s:textfield`等,简化了JSP页面的编写,提高了代码的可读性和可维护性。 7. **国际化与本地化**: - 商品展示系统...

    struts2登录注册简单实现

    使用Struts2的标签库(例如`s:textfield`,`s:password`,`s:submit`)可以使页面与Action类的属性绑定,方便数据传递。 5. **结果映射** 在`struts.xml`中,我们需要定义不同的结果类型,如成功(success)、错误...

    struts2简单案例

    - 使用Struts2时要注意安全问题,如SQL注入、XSS攻击等,合理使用Struts2的安全拦截器。 - 理解MVC模式的重要性,避免在JSP中编写过多的业务逻辑。 - 保持良好的编程习惯,如代码注释、命名规范等。 通过这个...

    struts1标签库运用总结

    Struts1是一个经典的Java Web开发框架,其核心之一就是丰富的标签库,它简化了开发者在JSP页面上的工作。在本文中,我们将深入探讨Struts1的四个主要标签库:bean、logic、html和tiles,并重点讲解每个库中的关键...

    Struts标签详细描述

    下面是对Struts标签的详细描述: 1. **Struts标签库介绍** Struts提供了多个预定义的标签库,如`struts-bean`, `struts-html`, `struts-logic`, 和 `struts-tiles`,这些库帮助开发者在JSP页面中处理常见任务,如...

Global site tag (gtag.js) - Google Analytics