您的位置:首页 > 运维架构 > 网站架构

网站安全之存储型跨站脚本编制

2017-03-26 17:30 351 查看

1.  说明问题

     也许读者看到博客的标题,会觉得有点疑惑。什么叫存储型跨站脚本编制。这个名字有点高大上了。其实也是,我们在网站的有些文本框中输入javaScript的代码或html的标签代码,我们本想作为信息存储,但是这样的文本却成为了代码执行出来。可能这样说读者会有点迷惑。我们来看下面的一个例子。

1)        在系统的添加信息的文本框中输入” <img src=1 onerror=alert(3)>.

2)        这条信息保存到数据库后,也会在网站的某个列表中显示出来,这时候,你没有对这条信息作处理,结果也就是变成了系统的可执行代码实现。页面会直接弹出一个‘3’的弹出框。



 这下读者应该知道它是谁了吧,也应该知道问题的严重性了吧。可别说,这样的问题也曾在大的IT公司出现过。轻者,可能是影响用户使用的体验感罢了,但是严重的话,作为黑客故意捣乱的话,那么结果大家就可想而知道了。下面笔者说明应该如何避免这样的问题出现我们的系统中。

2.  处理问题

     这个问题处理的方法有很多,可用使用第三方的框来协助我们解决这样的问题,下面笔者只介绍几个处理的方法。

1)        如果读者的系统是使用Ext的框架的话,那么就可以使用下面的方法。

//反转义
Ext.util.Format.htmlDecode()
//转义
Ext.util.Format.htmlEncode()

2)        我们也可以借助 commons-lang.jar包中的 StringEscapeUtils类的转义与反转义

//转义
StringEscapeUtils.escapeJava()
//反转义
StringEscapeUtils.unescapeJava()

3)        我们也可以使用Spring提供的方法来解决。

//转义
HtmlUtils.htmlEscape()
//反转义
HtmlUtils.htmlUnescape()

3.  总结

     对于存储型跨站脚本编制的问题,其实处理起来不难,但是很多时候是我们在开发时,忘记了需要注意这个问题,一旦忽略了这个问题,那么到后期修改就会非常麻烦;除非你的系统有很好的架构,可以直接写一个拦截器来处理。笔者是在接管了二次开发系统时发现在的这个问题,结果把我给坑死了。不过吃过了苦,就不会再吃了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: