论坛首页 Java企业应用论坛

bboss防止跨站攻击策略

浏览 3332 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-10-12   最后修改:2014-05-10
bboss防止跨站攻击策略
此前博客中撰文介绍了bboss 动态令牌机制轻松搞定表单重复提交的方法,本文介绍bboss防止跨站攻击的方法。

通过增强bboss字符编码转换器的功能实现防止跨站攻击功能:
com.frameworkset.common.filter.CharsetEncodingFilter

单纯(不具备防止跨站攻击能力)的字符编码转换过滤器的使用方法如下:
<filter>
	    <filter-name>CharsetEncoding</filter-name>
	    <filter-class>com.frameworkset.common.filter.CharsetEncodingFilter</filter-class>
	    <init-param>
	      <param-name>RequestEncoding</param-name>
	      <param-value>UTF-8</param-value>
	    </init-param>
	    <init-param>
	      <param-name>ResponseEncoding</param-name>
	      <param-value>UTF-8</param-value>
	    </init-param>
	    <init-param>
	      <param-name>mode</param-name>
	      <param-value>0</param-value>
	    </init-param>  
	    <init-param>
	      <param-name>checkiemodeldialog</param-name>
	      <param-value>true</param-value>
	      
	    </init-param>
	    
	    
    </filter>
 
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.frame</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.page</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.freepage</url-pattern>
  </filter-mapping>

这种情况下CharsetEncodingFilter是不具备防止跨站攻击功能的,但是为其增加两个init-param参数后就可以了:

    wallfilterrules 指定黑名单单词表,以逗号分隔多个单词,只要在参数值中出现其中的一个单词,参数值就会被置为null(即参数被过滤掉)
   wallwhilelist  指定不会被黑名单检测的参数的名称清单,多个参数以逗号分隔,白名单中的参数安全性需要应用程序自己控制,对值中出现的非法字符需要进行相应的处理后再输出到客服端(比如,针对浏览器的转义处理等措施)

下面看一个具体的配置示例:
<filter>
	    <filter-name>CharsetEncoding</filter-name>
	    <filter-class>com.frameworkset.common.filter.CharsetEncodingFilter</filter-class>
	    <init-param>
	      <param-name>RequestEncoding</param-name>
	      <param-value>UTF-8</param-value>
	    </init-param>
	    <init-param>
	      <param-name>ResponseEncoding</param-name>
	      <param-value>UTF-8</param-value>
	    </init-param>
	    <init-param>
	      <param-name>mode</param-name>
	      <param-value>0</param-value>
	    </init-param>  
	    <init-param>
	      <param-name>checkiemodeldialog</param-name>
	      <param-value>true</param-value>
	      
	    </init-param>
	    
	    <init-param>
	      <param-name>wallfilterrules</param-name>
	      <param-value><![CDATA[><,%3E%3C,<iframe,%3Ciframe,<script,%3Cscript,<img,%3Cimg,alert(,alert%28,eval(,eval%28,style=,style%3D]]>
	      </param-value>
	      
	    </init-param>
	    
	    <init-param>
	      <param-name>wallwhilelist</param-name>
	      <param-value><![CDATA[content,fileContent]]>
	      </param-value>
	      
	    </init-param>
	    
    </filter>

 
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.frame</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.page</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>CharsetEncoding</filter-name>
    <url-pattern>*.freepage</url-pattern>
  </filter-mapping>


配置完毕后,可以通过IBM APPSCAN和Netsparker之类的安全扫描工具来验证配置的有效性,同时可以根据测试结果或者实际情况调整wallfilterrules和wallwhilelist两个参数的配置,直到你的系统变得足够安全为止。
   发表时间:2013-10-14   最后修改:2013-10-14
你之所以每天在这里叫嚣,却甚少有人回应你,是因为你的软件没有让人眼前一亮的特色功能,说的难听点,就是你的框架是东拼西凑的东西,从底层技术,到功能实现,都是借鉴别人的,没有原创型亮点。

我不是信口开河,我看过你的源代码,有一次我需要解决一个问题,就是如何在一个方法内获得方法参数的名字( 不为参数添加注解的情况下,目的是为了最大化容错,做到即使开发者粗心大意忘记写参数注解,也可以自动根据方法参数的名字,使之与URI参数匹配上),我解决这个问题的时候,曾经看过你的源代码,发现你的代码都是东拼西凑过来的,甚至有的类是直接从Spring中拷贝过来的。

说实话,这种“借鉴”并不可耻,也很普遍,我也经常这么做,但是,如果想要把自己的软件推广开来,是不能天天卖弄一些别人都有的东西的,需要自己有亮眼的创新才可以。

我想你的技术应该是很好的,你缺的不是技术,是思路,我感觉你需要一个产品经理,或者说是需要一个产品设计师。

如果你想在WEB开发平台方面有所创新,可以联系我,可以给我私信,我也是做企业架构的,说不定咱们可以合作一把。
0 请登录后投票
   发表时间:2013-10-14  
youarestupid 写道
你之所以每天在这里叫嚣,却甚少有人回应你,是因为你的软件没有让人眼前一亮的特色功能,说的难听点,就是你的框架是东拼西凑的东西,从底层技术,到功能实现,都是借鉴别人的,没有原创型亮点。

我不是信口开河,我看过你的源代码,有一次我需要解决一个问题,就是如何在一个方法内获得方法参数的名字( 不为参数添加注解的情况下,目的是为了最大化容错,做到即使开发者粗心大意忘记写参数注解,也可以自动根据方法参数的名字,使之与URI参数匹配上),我解决这个问题的时候,曾经看过你的源代码,发现你的代码都是东拼西凑过来的,甚至有的类是直接从Spring中拷贝过来的。

说实话,这种“借鉴”并不可耻,也很普遍,我也经常这么做,但是,如果想要把自己的软件推广开来,是不能天天卖弄一些别人都有的东西的,需要自己有亮眼的创新才可以。

我想你的技术应该是很好的,你缺的不是技术,是思路,我感觉你需要一个产品经理,或者说是需要一个产品设计师。

如果你想在WEB开发平台方面有所创新,可以联系我,可以给我私信,我也是做企业架构的,说不定咱们可以合作一把。

楼上,拿来主义,也是个不错的方法,没法有好批评的地方
0 请登录后投票
   发表时间:2013-10-15   最后修改:2013-10-17
youarestupid 写道
你之所以每天在这里叫嚣,却甚少有人回应你,是因为你的软件没有让人眼前一亮的特色功能,说的难听点,就是你的框架是东拼西凑的东西,从底层技术,到功能实现,都是借鉴别人的,没有原创型亮点。

我不是信口开河,我看过你的源代码,有一次我需要解决一个问题,就是如何在一个方法内获得方法参数的名字( 不为参数添加注解的情况下,目的是为了最大化容错,做到即使开发者粗心大意忘记写参数注解,也可以自动根据方法参数的名字,使之与URI参数匹配上),我解决这个问题的时候,曾经看过你的源代码,发现你的代码都是东拼西凑过来的,甚至有的类是直接从Spring中拷贝过来的。

说实话,这种“借鉴”并不可耻,也很普遍,我也经常这么做,但是,如果想要把自己的软件推广开来,是不能天天卖弄一些别人都有的东西的,需要自己有亮眼的创新才可以。

我想你的技术应该是很好的,你缺的不是技术,是思路,我感觉你需要一个产品经理,或者说是需要一个产品设计师。

如果你想在WEB开发平台方面有所创新,可以联系我,可以给我私信,我也是做企业架构的,说不定咱们可以合作一把。


这位youarestupid回帖火药味十足啊,是个率性之人,这种性格我喜欢。从你的回帖里面可以看出你对bboss意见很大,还花了点心思看了下bboss的代码,并且能发现并指出bboss从spring拷贝了一个读取方法参数名称的类,这点让人钦佩。youarestupid说bboss借鉴了一些spring的东西,这个确实如此。但是,通过这个基于asm的帮助类获取到方法参数名称后,bboss如何存储这些参数元信息,又是如何使用这些元信息进行参数绑定的,这些东东才是bboss主要的东西,如果只关注某个点,很容易陷入只见树木不见森林的怪圈。从我本人的角度来看,bboss是一套完整的开源技术框架,为构建企业应用提供了一站式解决方案,而不是一个东拼西凑出来的东东,bboss的很多特色都可以从这个地址了解:http://yin-bp.iteye.com/

youarestupid应该也是一位热衷于技术的牛人,本人非常喜欢和热衷于技术的同行交流,尤其是面对面的碰撞和交流 ,通过种交流可以增进了解消除误区,可以发现bboss的不足、从中汲取好的思想和创意,不断完善和改进bboss。另外本人每天都忙于日常的项目上的事情,多是在业余时间来ITeye上逛逛,今天突然看到有人回复帖子,还是挺吃惊的 ,如果youarestupid有意指点一二,我的联系方式在以下链接上可以找到:
http://yin-bp.iteye.com/blog/1080824

做了这么多年的bboss,已经形成了一种在ITeye上写博客和发帖子的习惯,尤其是喜欢在ITeye上撰写介绍bboss方方面面的豆腐块文章,这样其实挺好,因为iteye提供的这个交流平台还不错,再者有些东西不写出来,放在脑袋里面估计过段时间就忘记了,而且还能起到分享的作用,而且还可以将这些文章整理出来,作为技术手册供bboss的使用者参考。最难能可贵的是在写技术性文档的同时可能会有新的想法冒出来,也可能会发现实现上的一些缺陷。总之做这个事情有百利而无一害,绝对不是为了所谓的“叫嚣”,“希望有人回应”,“哗众取宠”,“卖弄”之类的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics