Внедрение 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.
| Пред. | Уровень выше | След. |
| Подделка сессий | Начало | Directory Traversal |
0 comments | Make a comment