2017-01-01 4 views
1

Я использую PHPMailer для отправки электронной почты.Фильтровать/дезинфицировать тему и тело электронной почты в PHP

Теперь мы все знаем, что нам нужно всегда проверять ввод пользователя.
Но как насчет темы и тела писем? (так что я не имею в виду адрес электронной почты)

Что нужно дезинфицировать и как это сделать? Какая (основная) уязвимость?

Должен ли я использовать что-то вроде HTMLPurifier для этого? Потому что я хочу, чтобы пользователь мог разметить там электронные письма. Или я должен использовать/написать функцию BB-кода, что можно использовать?

Update:

Для тела письма:
я теперь использовать htmlspecialchars с ENT_QUOTES флагом. После этого запустите синтаксический анализатор BB-кода (jBBCode). Теперь это выглядит безопасно.

Для предмета:
Я не использую любые проверки/дезинфекцию/и т.д.. (кроме min и max strlen) в поле темы. Протестировано с помощью javascript, но похоже, что все в порядке.

Могу ли я предположить, что это безопасно сейчас? (Ps код не получает печататься нигде, чем в электронной почте.)

ответ

0

Вы можете использовать

<?php 
filter_var($body, FILTER_SANITIZE_FULL_SPECIAL_CHARS) 

для защиты от специальных символов также можно использовать RAW, такие как

<?php 
filter_var($body, FILTER_SANITIZE_RAW, FILTER_FLAG_ENCODE_HIGH) 

Полную информацию можно найти здесь ->https://secure.php.net/manual/en/function.filter-var.php

+0

Это сделает вещи безопасными, но не позволит разметке работать. – Synchro

2

Да, перед отправкой необходимо очистить ввод пользователя. HTMLPurifier и HTMLawest выполняют справедливую работу по дезинфекции, но их нужно настроить, чтобы не блокировать полезные вещи - оба ошибаются с осторожностью. BBCode или уценка делают вещи намного легче фильтровать, если вам не нужно делать сложные макеты.

+0

Пожалуйста, взгляните на мой обновленный вопрос и дайте мне свои ответы. Я обновлю некоторую информацию. –

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