Хостинг Django от «Джино»
Table of contents

Внедрение E-mail заголовка

Внедрение SQL является менее известным аналогом внедрения Email заголовка, которое крадёт данные форм при их отправке на электронную почту. Атакующий может использовать эту методику для рассылки спама через ваш почтовый сервер. Любая форма, которая создаёт почтовые заголовки, используя введённые в форму данные, уязвима для данного типа атак.

Давайте рассмотрим стандартную контактную форму, которую можно встретить на многих сайтах. Обычно, такая форма отсылает сообщение на жёстко определённый адрес и, следовательно, не подвержена уязвимости, через которую можно рассылать спам. Но это только на первый взгляд.

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

Если этот заголовок не экранируется во время генерации почтового сообщения, атакующий может отправить что-нибудь вида hello\ncc:spamvictim@example.com (где \n является символом перевода строки). Это может привести к созданию следующих заголовков:

To: hardcoded@example.com
Subject: hello
cc: spamvictim@example.com

Аналогично внедрению SQL, если мы доверяем пользователю вводить строку для темы письма, мы позволяем ему создавать вредоносный набор заголовков и использовать нашу контактную форму для рассылки спама.

Решение

Мы можем предотвратить такую атаку также как мы предотвращаем внедрение SQL — всегда экранируйте или проверяйте данные, которые вводит пользователь.

Встроенные в Django функции отправки электронной почты (django.core.mail) просто не позволяют использовать символы перевода строки в любом из полей, используемых для создания заголовков (from, to и subject). Если вы попытаетесь использовать django.core.mail.send_mail() совместно с полем subject, которое содержит символ перевода строки, то Django вызовет исключение BadHeaderError.

Если вы не используете встроенные в Django функции для отправки электронной почты, вам потребуется проверять заголовки на наличие там символа перевода строки. При их наличии надо будет выдавать ошибку или тихо удалять их оттуда. Рекомендуем посмотреть на класс SafeMIMEText в django.core.mail.


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5