Рамки комментариев Джанго и CSRF - PullRequest
2 голосов
/ 03 апреля 2012

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

Я использую структуру комментариев, чтобы разрешить только зарегистрированным пользователям отображать комментарии. Я изменил form.html и скрыл поля name, URL и email (оставив поля безопасности без изменений). Так что в значительной степени пользователь видит только поле comment. Я хотел использовать комментарии Django, так как он уже имеет некоторые приятные функции безопасности, такие как проверка меток времени, поле honeypot и функции анти-двойной публикации. Информация о пользователях взята из request.user RequestContext , и я получаю информацию о пользователе о комментарии по comment.user.get_full_name вместо comment.name или comment.user.email против comment.email.

Я также начинаю читать о защите CSRF от Django. В большинстве случаев люди говорят о том, как CSRF мешает хакерам, скажем, переводить деньги с зарегистрированного в банке банковского счета пользователя, используя свои cookie-файлы или что-то в этом роде.

В моем случае, CSRF запрещает людям публиковать сообщения как другие пользователи? Другими словами, может ли хакер создать свою собственную форму POST и опубликовать под другим user.pk, чтобы подделать других людей?

1 Ответ

3 голосов
/ 03 апреля 2012

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

CSRF - это атака, при которой кто-то, не имеющий разрешения на доступ к ресурсу, обманывает кого-то, у кого есть разрешение на доступ к нему.

Так, например, защита от CSRF может помешать кому-либо обманом заставить пользователя опубликовать комментарий со ссылкой на спам или вредоносное ПО. В качестве альтернативы, запрос, который он обманывает пользователя, может быть искажен, вызван сбоем вашего веб-сервера или содержать код, предназначенный для того, чтобы ускорить процесс проверки и нанести ущерб вашей базе данных или иным образом поставить под угрозу ваш сайт.

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

С защитой CSRF Django обнаружит, что это не настоящие данные, отправленные через реальную форму на вашем сайте, и отклонит их.

...