上篇文章介绍了xss 跨站的一些小技巧,我们不局限于传统的
<script>alert("xss")</script>这样的脚本,也会用一些其他的特殊处理方式,有兴趣的朋友可以去深入研究,毕竟只有知己知彼才能百战不殆。
但是系统往往在建设之处,很多所谓的设计者们并没有考虑这些问题,这才是为什么网上很多虽然活着却实际上已经死了的网站,
这里简单介绍一下jstl标签处理,
如果你讨厌数据库里面存放着一堆你看不懂的转义字符,或者你后台很多数据没有处理,或者,还有很多其他的原因你无能为力,
但是总不能页面显示的时候窗口乱弹吧 -_-#!
这里说一个解决思路,如果你使用JSP来构建你的页面,那你肯定不会陌生JSTL标签和EL表达式,那么JSTL标签可以帮助你解决一下xss问题
${}是el表达式,默认不过滤特殊符号的,但是你可以使用<c:out value='${}'/> 过滤特殊符号:)
这样可以帮助你很大程度上解决了页面的问题,还不用重启你的server,如果你觉得这样太过于麻烦(页面要修改的地方太多了)
我们可以修改el表达式的默认实现,让${}默认输出滤特殊字符。等价于<c:out value=''/>
参考帮助 http://pukkaone.github.io/2011/01/03/jsp-cross-site-scripting-elresolver.html
修改方式如下:
1、从
https://github.com/pukkaone/webappenhance/blob/master/src/main/java/com/github/pukkaone/jsp/EscapeXmlELResolver.java 下载三个
Escape类放项目里
2、下载jsp-api-2.1.jar加入项目,否则编译报 javax.el.ELResolver 找不到。
3、修改web.xml加入自己的监听器
<listener> <listener-class>com.xxxxx.support.xss.EscapeXmlELResolverListener</listener-class> </listener>
注意,框架里原来spring自动在绑定参数前过滤字符的,要去掉。只需要在页面输出的时候 escape 即可。而此时,${}直接就是escape的了。
此方法最后没有使用,原因是${pager.postToolBar}等输出,需要html输出,但是也被过滤了,改动也将很多。干脆还是开发人员在自己页面里用<c:out value="${}"/>输出。
反正我不是折腾了,我选择一条简单折中的线路。