依赖URL查询参数的顺序是合法还是安全?

时间:2014-09-05 13:31:57

标签: http url url-parameters

依赖URL查询参数的顺序是否合法或安全?具体来说,我是否能够编写代码,并相信该代码将始终有效,具有基于这两个查询字符串的不同行为:

?a=10&add=5&multiply=3    # might mean (10 + 5) * 3
?a=10&multiply=3&add=5    # might mean (10 * 3) + 5

(我的例子当然是做作的,我知道建立一个像这样的计算器是荒谬的。:))

1 个答案:

答案 0 :(得分:5)

这些查询字符串既完全合法又不同。根据{{​​3}},查询字符串只不过是

  

...用于识别URI方案和命名权限范围内的资源的非分层数据

HTML表单必须以key=value格式生成application/x-www-form-urlencoded对的规则详细RFC 3986。特别感兴趣的是如何解析application/x-www-form-urlencoded内容的规则:

  

要解码application/x-www-form-urlencoded有效负载,应使用以下算法....

     

此算法的输出是排序名称 - 值对列表。

因此,application/x-www-form-urlencoded查询字符串内容可以被正确地视为键/值对的排序列表。

但是,请记住并非所有Web框架都会捕获此信息。它们可能会为您提供从查询字符串解析的属性名称和值的无序字典。例如,Node.js中的in the W3C HTML spec方法将解析后的查询字符串作为对象(其属性为键/值`对)返回,并且JavaScript对象始终是无序的。