struts2中设置过滤,把可能输入的危险字符,转换后存入数据库,然后再显示出来
参考:http://www.iteye.com/problems/10135
?
http://commons.apache.org/lang/api/org/apache/commons/lang/StringEscapeUtils.html
保存之前,先进行escape().
bohemia (架构师) 2009-01-13
bohemia, 不同意你的意见, 数据未必仅仅给WEB应用的。所以还是要慎重。 我的观点是尊重用户的输入, 输出的时候, 转变。
http://commons.apache.org/lang/api/org/apache/commons/lang/StringEscapeUtils.html 对汉字好像处理的不好。 会导致汉字也被ecode,虽然这符合W3C的规范。 但是, 不符合中国的国情!
sdh5724 (资深程序员) 2009-01-13
存的时候,就做过滤,这个做法并不好,这样会修改用户输入的内容,从而导致一些字段长度验证会有问题,建议在显示的时候做这个过滤。
taopian (高级程序员) 2009-01-14
不知道你structs采用什么渲染技术的。 JSP? VELOCITY? JSF?? 每个东西的做法都不一样,
JSP的话你看看这个:
http://www.ibm.com/developerworks/tivoli/library/s-csscript/
VELOCIY的话, 可以自己实现渲染输出定义。 就实现一个输出渲染的CALLBACK接口。
sdh5724 (资深程序员) 2009-01-14
JSP没有什么好的办法, 想在架构上解决, 目前, 我还想不出来。
sdh5724 (资深程序员) 2009-01-14
设置过滤器吧; 简单有效的办法.
bohemia (架构师) 2009-01-14
JSON 你看看API去, 能不能自己改造, 或者有API的扩展实现。 JSON目前是XSS最泛滥的地方。 这个问题, 我也会去研究下, 太危险了。
sdh5724 (资深程序员) 2009-01-14
楼上说设置过滤器, 对新项目是个好办法, 但是对于已经在运行的项目, 数据库有很庞大的数据情况下, 还是无法做到安全。 目前的XSS攻击, 被发现漏洞后, 并不会马上给攻击, 基本会挂一个空的木马, 然后选择时机把真正的木马挂上去。防不胜防。 我觉得LZ要输出过滤, 基本也是因为有数据的原因吧。
我很庆幸当初选择的是VELOCITY, 因此, 实施安全起来特别愉快, 需要改造的地方不多。