Являются ли Cookies угрозой безопасности?

Предположим, у нас есть веб-сайт, который запрашивает у пользователя его имя.

Затем веб-сайт сохраняет это значение в файле cookie, а на следующей странице извлекает его через PHP и как-то использует (возможно, на странице отображается имя в виде текста).

Мог ли пользователь изменить данные cookie для ввода вредоносного кода? Должны ли данные cookie быть дезинфицированы по мере их восстановления по сценарию?

(Это гипотетический сценарий. Очевидно, что cookie здесь не нужен).

Мог ли пользователь изменить данные cookie для ввода вредоносного кода? Должны ли cookie очищаться по мере их восстановления по сценарию?

Вставить вредоносный код? Не PHP-код, но вы правы, что перед тем, как работать с ними, вы должны дезинфицировать значения cookie.

Файлы cookie могут быть легко модифицированы, добавлены и удалены пользователями и должны рассматриваться как ненадежные пользовательские данные. Они так же подвержены XSS и SQL-инъекциям vunlerabilities, как и любой другой пользовательский ввод.

Кроме того, если вы используете SSL, файлы cookie так же подвержены обнюхиванию, как данные GET или POST в запросе. Вредоносные интернет-сервисы могут перехватывать или изменять файлы cookie. Также см. Firesheep для примера того, как файлы cookie могут использоваться неправильно и недоверчиво.

При использовании файлов cookie нет встроенного риска безопасности. Риски безопасности исходят от обработки данных cookie и данных, хранящихся в файлах cookie. Если, например, вы делаете что-то вроде этого:

 <h3>Hello, <?php echo $_COOKIE['user']; ?>!</h3> 

… тогда пользователь сможет ввести произвольный код на вашу страницу (уязвимость XSS). Чтобы устранить эту проблему безопасности, вы должны должным образом избежать данных cookie для контекста HTML:

 <h3>Hello, <?php echo htmlspecialchars($_COOKIE['user']); ?>!</h3> 

Все vars в PHP с $ _ ($ _POST, $ _GET, $ _COOKIE, $ _FILE, $ _SESSION) перед именем должны быть проверены перед их помещением на страницу или в базу данных.

Вы можете использовать htmlentities( $str ) для защиты большей части инъекций.

Куки-файлы – это всего лишь еще одна форма ввода от клиента, поскольку клиент может отправить вам все, что захочет, в файл cookie, и ваше приложение не должно доверять тому, что отправлено в cookie, пока вы его не дезинфицируете / не проверяете.

Хорошее руководство по выполнению проверки данных , которое должно быть надлежащим образом применено ко всем входам в ваше приложение, включая файлы cookie, предоставляется OWASP и может быть найдено здесь . Краткая форма: принять приемлемую-хорошо-правильную проверку, где вы четко определяете приемлемые входные данные и принимаете их только. Хорошая идея – наличие черного списка в дополнение к блокированию известных плохих моделей (в сочетании с хорошим соглашением, хорошо известным и не заменяющим его).