2012-01-24 10 views
3

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

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

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

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

+1

См [WP: Cookies] (http://en.wikipedia.org/wiki/HTTP_cookie) и общих [ '$ _COOKIE'] (http://php.net/_COOKIE) в руководстве («обработка внешних переменных»). – mario

ответ

4

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

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

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

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

+0

Почему не исполняемый код? – Peter

+0

+1 - Firesheep. – Daniel

+0

если вы «запустили» данные из файла cookie, вы просто сумасшедшие. –

1

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

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

+0

'htmlentities' может злонамеренно манипулировать Юникодом, если его не обрабатывать осторожно. 'htmlspecialchars' обеспечивает тот же уровень защиты от XSS без набора символов shenanigans. – Charles

+0

@Charles: функция 'htmlentities()' принимает необязательный третий параметр для указания набора символов. Он будет «злонамеренно калечить» ваши данные, если вы не используете правильные настройки. – FtDRbwLXw6

+0

Хотя это правда, это также заставляет вас задуматься о кодировке символов на * каждом звонке *, который в лучшем случае является громоздким и в худшем случае раздражает. – Charles

0

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

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

3

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

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

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

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

В первом примере можно ввести исполняемый PHP-код? – Peter

+0

@Peter: Да, это возможно, но это не из-за использования файлов cookie. Это из-за отсутствия * надлежащего удаления данных. Такая же уязвимость существует с POST, GET, SERVER, FILE, SESSION и т. Д., Если вы не избегаете данных правильно. – FtDRbwLXw6

 Смежные вопросы

  • Нет связанных вопросов^_^