我在表单中有description
字段。
正如这里所建议的那样,HTML转义不应该在输入中完成,所以如果你把<h1>Description</h1>
放在这样的数据库中就可以了。
问题是我已经定义了一个REST API,输出“可能”是HTML。
我应该在构造JSON时转义字段,还是应该在JSON中输出HTML并让客户端转义它?。
我觉得我应该逃离HTML服务器端,但是这个操作会花费处理时间。另一方面,在HTML中转义会节省此服务器时间,但使用API而不小心转义HTML的人可能会以XSS攻击结束。
答案 0 :(得分:3)
客户端可能将成为一个Javascript客户端,应该使用DOM API处理这些潜在的HTML值:
document.getElementById('output').textContent = json.result;
使用此DOM API非常安全,不需要转义json.result
,,因为它永远不会内插为HTML ,而是被更高级别的API视为文本节点。如果你发送转义的HTML并且客户端像这里一样正确地执行它,那么转发的HTML将显示在客户端上;即你把数据变成垃圾。
所以,不,永远不要逃避不相关的上下文的值。将值放入JSON时对JSON进行转义/编码,不要担心以后会发生什么或不发生什么。