从我所看到的一切来看,在用户输入的内容上转义 html 的惯例(为了防止 XSS)似乎是在呈现内容时进行。大多数模板语言似乎默认情况下都会这样做,我遇到过类似这个 stackoverflow 的答案,他们认为这个逻辑是表示层的工作。
所以我的问题是,为什么会这样?对我来说,在输入(即表单或模型验证)时转义似乎更干净,因此您可以假设数据库中的任何内容都可以安全地显示在页面上,原因如下:
多种输出格式 - 对于现代 Web 应用程序,您可能正在使用服务器端 html 呈现、使用 AJAX/JSON 的 JavaScript Web 应用程序和接收 JSON 的移动应用程序的组合(可能有也可能没有一些 Web 视图,可能是 JavaScript 应用程序或服务器呈现的 html)。所以你必须处理到处都是 html 转义。但是输入在保存到数据库之前总是会被实例化为模型(并经过验证),并且您的模型都可以从同一个基类继承。
您已经必须小心输入以防止代码注入攻击(当然这通常被抽象为 ORM 或 db 游标,但仍然如此),所以为什么不在这里也担心 html 转义,这样您就不必担心任何事情安全相关的输出?
我很想听听为什么 html 在页面渲染上转义是首选的论点