Eth*_*han 5 javascript python unicode ajax mongodb
我正在尝试确定在MongoDB中存储和显示用户输入的最佳实践.显然,在SQL数据库中,需要对所有用户输入进行编码以防止注入攻击.但是,我的理解是,对于MongoDB,我们需要更加担心XSS攻击,用户输入是否需要在存储在mongo中之前在服务器上进行编码?或者,使用像把手这样的模板库,只需在字符串显示在客户端之前对其进行简单编码就足够了吗?
这是我正在谈论的流程:
这个流程是否会显示正确的信息并且不受XSS攻击的影响?关于汉字这样的unicode字符怎么样?
这也可以改变文本搜索的完成方式,因为如果所有用户文本都被编码,则在开始搜索之前可能需要对搜索项进行编码.
非常感谢!
"<script>alert('hi');</script>"
在将其发送到服务器之前是否需要转义?
不,必须在它最终进入 HTML 页面之前对其进行转义 - 上面的步骤 (5)。
当文本被注入到新的周围上下文中时,必须应用正确的转义类型。这意味着您在将数据包含在 HTML 页面中时对其进行 HTML 编码。理想情况下,您使用的是现代模板系统,它将自动为您执行转义。
(类似地,如果您在块中的 JavaScript 字符串文字中包含数据<script>
,则必须对其进行 JS 编码;如果您在样式表规则中包含数据,则必须对其进行 CSS 编码,依此类推。如果我们使用 SQL 查询将数据注入到字符串中,那么我们需要进行 SQL 转义,但幸运的是 Mongo 查询通常是使用 JavaScript 对象而不是字符串语言完成的,因此无需担心转义。)
数据库不是 HTML 上下文,因此在传输到数据库的过程中对输入数据进行 HTML 编码并不是正确的做法。
(除了注入之外,还有其他 XSS 来源,最常见的是不安全的 URL 方案。)