Законно или безопасно зависеть от порядка параметров запроса 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 всегда неупорядочены.

Другие вопросы по тегам