依赖 URL 查询参数的顺序是不是合法或安全?
Posted
技术标签:
【中文标题】依赖 URL 查询参数的顺序是不是合法或安全?【英文标题】:Is it legal or safe to depend on the ordering of URL query parameters?依赖 URL 查询参数的顺序是否合法或安全? 【发布时间】:2014-10-30 11:30:23 【问题描述】:依赖 URL 查询参数的顺序是否合法或安全?具体来说,我是否能够编写代码,并相信该代码将始终有效,并且基于这两个查询字符串具有不同的行为:
?a=10&add=5&multiply=3 # might mean (10 + 5) * 3
?a=10&multiply=3&add=5 # might mean (10 * 3) + 5
(我的例子当然是人为的,我知道像这样构建一个计算器很可笑。:))
【问题讨论】:
旁注:如果你不指定括号我建议依靠PEMDAS,至少你会有正确的数学 【参考方案1】:这些查询字符串是完全合法且不同的。根据RFC 3986,查询字符串无非就是
...用于在 URI 方案和命名权限范围内标识资源的非分层数据
html 表单必须如何生成application/x-www-form-urlencoded
格式的key=value
对的规则在in the W3C HTML spec 中有详细说明。特别感兴趣的是如何解析application/x-www-form-urlencoded
内容的规则:
要解码
application/x-www-form-urlencoded
有效载荷,应使用以下算法....该算法的输出是一个排序的名称-值对列表。
因此,application/x-www-form-urlencoded
查询字符串内容可能被正确地视为键/值对的排序列表。
但是,请记住,并非所有 Web 框架都能捕获此信息。相反,它们可能会为您提供从查询字符串解析的属性名称和值的无序字典。例如,Node.js 中的url.parse
方法将解析后的查询字符串作为对象返回(其属性为键/值对),而 javascript 对象始终是无序的。
【讨论】:
以上是关于依赖 URL 查询参数的顺序是不是合法或安全?的主要内容,如果未能解决你的问题,请参考以下文章