javascript - url应该以编码形式还是解码形式存储?

标签 javascript node.js mongodb url encoding

我的问题有点奇怪,但让我解释一下:

  1. 假设有效的 URI 不允许根据 RFC-2396 使用 unicode,则 URI 中的所有 unicode 都应使用百分比编码进行转义。

  2. 一个有效的 URL 应该是一个有效的 URI,所以我们应该使用 http://example.com/%E4%BD%A0%E5%A5%BD 而不是 http://example.com/你好 发出请求或将它们放入 href 时(尽管大多数浏览器可以处理后一种情况)。

  3. 此外,我们接受用户提交的 URL,这些 URL 也经过编码(因为当您从地址栏复制 URL 时,浏览器会对它们进行编码)。

  4. 因此我们决定(可能是错误的)将它们存储为 http://example.com/%E4%BD%A0%E5%A5%BD,而不是http://example.com/你好,毕竟这是原始输入和正确的 url。

当我尝试显示此类 URL 时,我的问题来了,假设它们是用户提交的,我需要对这些数据运行 xss 过滤器。一些实现,例如 xss-filters似乎在运行 encodeURI作为过滤器的一部分,意味着 % 将被双重编码,例如。 %E4 -> %25E4,在这个过程中破坏了 url。

那么我们是否应该以解码形式存储 url(即使它们是无效的)?在输出上运行 decodeURI 对我来说没有多大意义......

最佳答案

首先,RFC 2396 已被 RFC 3986 废弃.其次,,如果您的存储机制允许,您应该以解码形式存储您的 URI。

更新 来自 Section 2.4

Under normal circumstances, the only time when octets within a URI are percent-encoded is during the process of producing the URI from its component parts.

更新 2 此外,表示 URI 的一串 unicode 字符实际上是一个 IRI。参见 RFC 3987

关于javascript - url应该以编码形式还是解码形式存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30526880/

相关文章:

javascript - 如何编写对应于以下 javascript 的 typescript ?

javascript - 从 JSON 对象数组中获取与条件匹配的文档

MongoDB:按键迭代集合?

mongodb - 将 mongodb 聚合中的值转换为键

javascript - 为什么这个函数总是返回 'undefined'

javascript - 当 ajax 调用更改其值时,AngularJS 中的 ng-repeat 列表不会更新

java - JS 和 Spring 的麻烦

javascript - 多次切片 JavaScript TypedArray

javascript - 在 If == 语句中选择 2 个东西?

node.js - express.js 中 app.use 和 app.get 的区别