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