Нужно ли экранировать значения cookie при настройке из API сервлета? - PullRequest
9 голосов
/ 29 июля 2011

Servlet API предоставляет удобный способ установки файлов cookie:

   response.addCookie(new Cookie(name, value))

JavaDoc сообщает:

При использовании файлов cookie версии 0 значения не должны содержать пробелов, скобок, скобок,знаки равенства, запятые, двойные кавычки, косые черты, знаки вопроса, знаки, двоеточия и точки с запятой.Пустые значения могут не работать одинаково во всех браузерах.

Однако это не говорит о том, что происходит, если эти значения присутствуют в значении.

Если значение происходит из ненадежного источникаМогу ли я использовать API, чтобы безопасно установить значение без дополнительной предварительной обработки, или я могу открыть дверь для какой-либо инъекции?

1 Ответ

7 голосов
/ 30 июля 2011

Если значение исходит из ненадежного источника, могу ли я использовать API для безопасной установки значения без дополнительной предварительной обработки?

Нет, вы не можете. API не позаботится об этом за вас. В противном случае это было бы явно указано в Javadoc. API может заранее не знать, используете ли вы файлы cookie версии 0 ( Netscape ) или версии 1 ( RFC2965 ).

Лучше всего заранее зашифровать URL-адрес имени / значения куки, чтобы вы могли убедиться, что в итоге вы получите безопасное имя / значение куки.

String safeCookieName = URLEncoder.encode(name, "UTF-8");
String safeCookieValue = URLEncoder.encode(value, "UTF-8");
response.addCookie(new Cookie(safeCookieName, safeCookieValue));
// ...

Кроме того, вы также можете использовать регулярные выражения, чтобы заранее удалить все недопустимые символы. Допускаются только буквенные символы, цифры, дефисы, подчеркивания, точки, тильды и, возможно, еще несколько (зависит от браузера!). Все остальные должны быть удалены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...