Являются ли Cookies угрозой безопасности? - PullRequest
3 голосов
/ 24 января 2012

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

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

Может ли пользователь изменить данные cookie, чтобы внедрить вредоносный код?Должны ли данные cookie быть очищены при получении сценарием?

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

Ответы [ 4 ]

4 голосов
/ 24 января 2012

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

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

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

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

3 голосов
/ 24 января 2012

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

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

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

<h3>Hello, <?php echo htmlspecialchars($_COOKIE['user']); ?>!</h3>
1 голос
/ 24 января 2012

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

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

0 голосов
/ 24 января 2012

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

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

...