【问题标题】: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,至少你会有正确的数学

标签: http url url-parameters


【解决方案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 对象始终是无序的。

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多