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

Sco*_*ord 5 url http 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
Run Code Online (Sandbox Code Playgroud)

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

aps*_*ers 5

那些查询字符串既完全合法又不同.根据RFC 3986,查询字符串只不过是

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

W3C HTML规范中详细说明了HTML表单必须如何生成格式key=value对的规则.特别感兴趣的是如何解析内容的规则:application/x-www-form-urlencodedapplication/x-www-form-urlencoded

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

该算法的输出是名称 - 值对的排序列表.

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

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