url应该以编码或解码的形式存储
Should url be stored in encoded or decoded form?
我的问题有点奇怪,但让我解释一下:
-
假设有效的URI不允许每个RFC-2396的unicode, URI中的所有unicode都应该使用百分比编码进行转义。
-
一个有效的URL应该是一个有效的URI,所以我们应该使用
http://example.com/%E4%BD%A0%E5%A5%BD
而不是http://example.com/你好
当请求或把它们放在href
(即使大多数浏览器可以处理后一种情况)。 -
此外,我们接受用户提交的URL,这些URL也是编码的(因为当你从地址栏复制URL时浏览器会对它们进行编码)。
-
所以我们决定(可能是一个错误)将它们存储为
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。
选自第2.4节
在正常情况下,只有当字节在URI内时在生成URI的过程中,百分比编码是它的组成部分。
更新2 此外,表示URI的unicode字符字符串实际上就是IRI。参见RFC 3987
注意,https://url.spec.whatwg.org/#urls是定义url的东西。它取代了您提到的那些rfc。
。,你的前提是不正确的,特别是这一部分:
一个有效的URL应该是一个有效的URI,所以我们应该使用
http://example.com/%E4%BD%A0%E5%A5%BD
而不是http://example.com/你好
当请求或把它们放在href(尽管大多数浏览器可以处理后一种情况)。
你为什么这么说?http://example.com/你好
是一个完全有效的URL
- 将作用域存储在JSON中
- 使用javascript存储变量的最安全方式
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 如何有效地将游戏数据存储在URL查询字符串中
- Ember.js-接口状态应该存储在哪里
- 如何解雇“;铁局部存储负载”;事件
- 本地存储中的字符串到字节数组转换
- 从jQuery调用存储在Variable中的函数
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 通过另一个php应用程序将我的项目推送到Github存储库中
- 将数据存储在javascript数组中以供进一步使用
- 在文本区域POST后解码JSON
- 在页面卸载时写入HTML5 FileSystem API存储
- 加载存储在IndexedDB中的HTML页面
- 在字符串中查找所有图像 src URL 并存储在数组中
- 如何从C#代码背后调用本地存储的javascript函数
- 如何解码javascript json存储在php中使用$_POST隐藏字段
- 是否在服务器端存储未解码的jwt令牌
- url应该以编码或解码的形式存储