例如,用户提交的数据a < b方法1,存入数据库时编码,即存入的是a < b方法2,写 Html 时编码,即原样存入数据库a < b但在写到页面前,编码成a < b我个人比较倾向方法1,因为 XSS 是浏览器误会造成的,而后台返回的数据不一定只给浏览器呀,其他客户端(如手机APP)就不用担心,这是其一;其二,如果这一列在 SELECT 时要比较的话,方法2 就要求比较的值也必须先编码,否则不可能相等,如:WHERE c = 'a < b'这么写肯定不行,因为数据库存的是 'a < b'。所以,从纯粹程序设计的角度讲,方法2 总是假定客户端是浏览器,不好。但是方法1 的问题是,如果每次写到 html 时都要 “记得” 编码,太容易忘!一旦忘记,也就埋下了安全隐患,对吧?所以您的建议是?
1 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
我当时写过一个保存富文本的功能. 用的是方法2(必须保存html标签, 没办法), 富文本的内容是方法1.
说到防xss, 我当时是在页面提交富文本的时候, 使用jsoup(java过滤xss攻击脚本). 由于需要保存的是富文本. 所以到页面渲染的时候, 不做转义(富文本编辑后上传的内容都是转义后的, 除了一些富文本生成的标签对).
假如不使用富文本的情况下, 方法1确实方便. 但富文本的情况, 需要查找html实体的时候, 就必须转义了.
- 1 回答
- 0 关注
- 756 浏览
添加回答
举报
0/150
提交
取消