Каковы риски использования символов кавычек как части параметра URL?

Мне нужно разрешить пользователю отправлять запросы следующим образом;

/search/"my search string"

но это не удается из-за проверки запроса, как описано в следующих 2 вопросах:

Как включить символы кавычек в качестве параметра маршрута? Получение сообщения "Недопустимые символы в пути"

Как изменить проверку запроса?

В настоящее время я пытаюсь выяснить, как отключить проверку запроса для символа кавычки, но я хотел бы узнать о рисках, прежде чем я фактически переведу сайт в режим реального времени с отключенным? Я не отключу проверку запроса, если не смогу отключить его только для символа кавычки, поэтому я намерен запретить все остальные символы, которые в настоящее время не разрешены.

1 ответ

Решение

Согласно спецификации универсального синтаксиса URI ( RFC 2396), символ двойной кавычки явно исключен и должен быть экранирован (т.е. %22). Смотрите раздел 2.4.3. Причина, приведенная в спецификации:

Символы угловых скобок "<" и ">" и двойных кавычек (") исключаются, поскольку они часто используются в качестве разделителей вокруг URI в текстовых документах и ​​полях протокола.

Вы можете легко понять, почему это так - представьте, что вы пытаетесь создать ссылку в HTML на ваш URL:

<a href="http://somesite/search/"my search string""/>

Это приведет к сбою анализа HTML (а также к нарушению подсветки синтаксиса SO). У вас также могут возникнуть проблемы с выполнением простых действий с URL-адресом, таких как отправка его по электронной почте кому-либо (почтовый клиент не сможет правильно проанализировать URL-адрес), размещение его на доске объявлений, отправка его в мгновенном сообщении и т. Д.

Для чего это стоит, пробелы также явно исключены (тот же раздел RFC объясняет почему).

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