#php #variables #filter
#php #переменные #Фильтр
Вопрос:
Я использую php для сбора данных формы и отправки их на адрес электронной почты. Я использую php filter_vars для очистки записей. Как бы то ни было, это возвращает закодированный html в теле сообщения электронной почты. Например, я становлюсь Iamp;#39;m
$message = "";
$message = $_POST["message"];
$message = filter_var($message, FILTER_SANITIZE_STRING);
$message = wordwrap($message, 70);
...
$Body .= $message;
$success = mail($EmailTo, $Subject, $Body, $headers);
Мой вопрос таков: если я использую htmlspecialchars_decode в электронном письме типа $Body .= htmlspecialchars_decode($message)
, отменяю ли я очистку и повторно открываю уязвимость? Как бы мне безопасно преобразовать закодированный html в html-объекты, чтобы мой клиент мог прочитать электронное письмо?
Комментарии:
1. вы сохраняете данные в базе данных, а затем показываете их обратно?
2. похоже, что @waanofii.tech поступает из
$_POST["message"]
, а затем по электронной почте.3. Я бы поискал «XSS exploit» в Интернете. Это должно помочь ответить на этот вопрос.
Ответ №1:
FILTER_SANITIZE_STRING
используется для удаления тегов, необязательно удаления или кодирования специальных символов.
Таким образом, вы просто удаляете теги и кодируете другие вещи. Чтобы не кодировать кавычки, используйте флаг фильтра FILTER_FLAG_NO_ENCODE_QUOTES
:
$message = filter_var($message, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
Взгляните на фильтры очистки, чтобы увидеть другие, такие как не кодирование amp;
и т.д.
Однако, htmlspecialchars_decode($message)
все должно быть в порядке, потому что вы уже удалили HTML-теги, и это будет декодировать только другие объекты, такие как кавычки ' "
, амперсанд amp;
и т.д. При этом вы могли бы просто использовать strip_tags($message)
в первую очередь, чтобы оставить кавычки и амперсанды в покое.
Комментарии:
1. Спасибо за вашу помощь и вдумчивый ответ. Я буду использовать FILTER_FLAG_NO_ENCODE_QUOTES, поскольку я хотел бы опустить скобки.
2. Тогда просто используйте strip_tags и все.