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