请问防 XSS,存入数据库时编码,还是写 Html 时编码?

例如,用户提交的数据

a < b

方法1,存入数据库时编码,即存入的是

a &lt; b

方法2,写 Html 时编码,即原样存入数据库

a < b

但在写到页面前,编码成

a &lt; b

我个人比较倾向方法1,因为 XSS 是浏览器误会造成的,而后台返回的数据不一定只给浏览器呀,其他客户端(如手机APP)就不用担心,这是其一;

其二,如果这一列在 SELECT 时要比较的话,方法2 就要求比较的值也必须先编码,否则不可能相等,如:

WHERE c = 'a < b'

这么写肯定不行,因为数据库存的是 'a &lt; b'。

所以,从纯粹程序设计的角度讲,方法2 总是假定客户端是浏览器,不好。但是方法1 的问题是,如果每次写到 html 时都要 “记得” 编码,太容易忘!一旦忘记,也就埋下了安全隐患,对吧?

所以您的建议是?


Qyouu
浏览 760回答 1
1回答

30秒到达战场

我当时写过一个保存富文本的功能. 用的是方法2(必须保存html标签, 没办法), 富文本的内容是方法1.说到防xss, 我当时是在页面提交富文本的时候, 使用jsoup(java过滤xss攻击脚本). 由于需要保存的是富文本. 所以到页面渲染的时候, 不做转义(富文本编辑后上传的内容都是转义后的, 除了一些富文本生成的标签对).假如不使用富文本的情况下, 方法1确实方便. 但富文本的情况, 需要查找html实体的时候, 就必须转义了.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5