Законно или безопасно зависеть от порядка параметров запроса URL?
Законно или безопасно зависеть от порядка параметров запроса URL? В частности, смогу ли я написать код и поверить, что этот код всегда будет работать, который имел различное поведение на основе этих двух строк запроса:
?a=10&add=5&multiply=3 # might mean (10 + 5) * 3
?a=10&multiply=3&add=5 # might mean (10 * 3) + 5
(Мой пример, конечно, надуман, я знаю, что создавать калькулятор, как это, нелепо:))
1 ответ
Эти строки запроса являются совершенно законными и разными. Согласно RFC 3986, строка запроса не более чем
... неиерархические данные, которые... служат для идентификации ресурса в рамках схемы URI и полномочий по присвоению имен
Правила того, как HTML-формы должны генерироваться key=value
пары в application/x-www-form-urlencoded
формат подробно описан в спецификации W3C HTML. Особый интерес представляют правила разбора application/x-www-form-urlencoded
содержание:
Расшифровать
application/x-www-form-urlencoded
полезные нагрузки, следует использовать следующий алгоритм....Результатом этого алгоритма является отсортированный список пар имя-значение.
Следовательно, application/x-www-form-urlencoded
содержимое строки запроса может быть правильно расценено как отсортированный список пар ключ / значение.
Однако имейте в виду, что не все веб-фреймворки собирают эту информацию. Вместо этого они могут предоставить вам неупорядоченный словарь имен свойств и значений, проанализированных в строке запроса. Например, url.parse
Метод в Node.js возвращает проанализированную строку запроса в виде объекта (свойства которого являются парами ключ / значение), а объекты JavaScript всегда неупорядочены.