Статьи ⇒ PHP ⇒ Пишем безопасный код на PHP. Часть 4

Пишем безопасный код на PHP. Часть 4

Опубликовано: 15 сен 2011 в 09:53
Автор: Dave Child  Перевод: freeeeez 

Эта четвертая и заключительная статья из серии Пишем безопасный код на PHP. В предыдущих статьях я раскрыл многие из распространенных ошибок и уязвимостей, которые допускают PHP-разработчики. В данной статье мы рассмотрим более продвинутые проблемы безопасности сайтов на PHP.

Пишем безопасный код на PHP представляет собой серию статей.
Читайте также Часть 1, Часть 2 и Часть 3.

Cross-Site Request Forgery (CSRF)

Несмотря на схожее с XSS название, CSRF является совершенно другой формой атаки на сайт. Эта атака позволяет манипулировать пользователями других сайтов для выполнения нужных запросов от их имени.

Предположим, что Петя залогинился в свой онлайн-банк. Каждый раз, когда он посылает HTTP-запрос в банк (например, перезагружает страницу), его браузер посылает куки вместе с запросом так, что сервер банка понимает, кто выполняет запрос.

Тем временем Вася обманным путем (например, через фишинговую ссылку) сумел заставить Петю посетить его сайт. На этом сайте одним из элементов страницы является iFrame, который содержит форму банка с инструкциями по переводу денег на счет. Так как запрос исходил от компьютера Пети (куки были в запросе), банк на законных основаниях переводить все его средства на счет Васи.

Этот тип атаки крайне опасен потому, что ее очень сложно отследить. Как разработчик вы должны защититься от такого рода атак на свой сайт. С практической точки зрения, на PHP вы можете бороться с CSRF разными методами.

Здесь автор советует использовать POST запросы вместо GET и проверять HTTP_REFERER заголовок, но подделать POST запрос вместе с заголовком не так сложно. Это называется "защита от дурака", поэтому я опускаю этот абзац.

Добавьте случайно сгенерированный маркер к полю формы и проверяйте его присутствие после запроса. Еще лучше добавить к форме тест Тьюринга (КАПЧА) с дополнительным полем для ввода символов. Не лишним будет также ограничение времени сессии пользователя, но это не является обязательным, так как особой безопасности не несет, а лишь раздражает пользователя.

Более подробные методы защиты от CSRF я описывал в предыдущей статье.
 

Кодировки

Кодировки символов в PHP и базах данных достойны отдельного рассмотрения, так как они могут быть различными. Например, один запрос к базе данных может содержать сразу несколько кодировок символов: HTTP-запрос, отправленные данные, кодировка PHP, кодировка MySQL модуля.

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

Решением этой проблемы станет обработка данных функцией addslashes() или mysql_real_escape_string(). В чем особенности и отличия данных функций я рассказывал в статье про экранирование.

Источник: Add Bytes внешняя ссылка
Тэги:  •  •  • 
Нет комментариев
4 539 просмотров


Оставить комментарий:

Имя:
Email:
Сайт:
Комментарий:

Допустимые теги: <em> • <strong> • <u> • <sub> • <sup> • <blockquote>

Проверочный код:

Введите проверочный код, для подтверждения, что вы не робот.
P.S. Если вы робот, то, к сожалению, вы
не сможете прочитать символы с картинки.