2014-09-05 2 views
4

Является ли законным или безопасным зависеть от заказа параметров 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

Сторона примечания: если вы не указали parhentesis, я предлагаю полагаться на PEMDAS, по крайней мере, у вас будет правильная математика – BigMike

ответ

4

Эти строки запросов являются абсолютно законными и четкими. Согласно RFC 3986, строка запроса является не более чем

... неиерархический данные, которые ... служит для идентификации ресурса в рамках схемы URI, и называя власть

В правила для формирования форм HTML key=value пар в формате application/x-www-form-urlencodedin the W3C HTML spec. Особый интерес представляют правила, как разобрать application/x-www-form-urlencoded содержания:

Для декодирования application/x-www-form-urlencoded полезных нагрузок, следующий алгоритм должен быть использован ....

Выводом этого алгоритма является отсортирован списка пар имя-значение.

Поэтому application/x-www-form-urlencoded содержание строки запроса может быть правильно расценено как отсортированный список пар ключ/значение.

Однако, имейте в виду, что не все веб-фреймворки фиксируют эту информацию. Вместо этого они могут предоставить вам неупорядоченный словарь имен свойств и значений, проанализированных из строки запроса. Например, метод url.parse в Node.js возвращает анализируемую строку запроса как объект (чьи свойства являются парами ключ/значение), а объекты JavaScript всегда неупорядочены.