Застрял в этом на несколько дней. Я пытаюсь воспроизвести пример внедрения заголовка письма (http://www.phpsecure.info/v2/article/MailHeadersInject.en.php). Сообщение по этому вопросу уже существует ( вставка заголовка сообщения электронной почты - пример не работает ), но у него не было никакого решения. Я получил основную контактную форму c, используя метод POST с тремя полями (От, Тема и Сообщение), которые затем используются для отправки почты. Мне нужно, чтобы пользователь мог вводить символы Unicode / Hexa в поля.
Например, если пользователь вводит address%40gmail%2ecom
Я хочу, чтобы выходные данные в полезной нагрузке SMTP были From: address@gmail.com
Если я жестко кодирую $from = "address%40gmail%2ecom"
, то вывод будет желаемым.
Однако, если я использую пользовательский ввод в поле 'from' формы ie $from = $_POST['from']
, вывод, который я получаю при проверке журнал отладки моего SMTP-клиента From: address%40gmail%2ecom
. Я что-то не так с кодировкой или активирована какая-то защита, от которой я должен избавиться?
Если это актуально, я использую WAMPserver и PHP 7.1.
Мой код:
<html>
<head>
<meta http-equiv="content-type" content="text/html" />
<title>Vulnerable contact page</title>
<link rel="stylesheet" href="email.css"/>
</head>
<body>
<form method="POST" action="">
<fieldset>
<legend>Send us a mail</legend>
<label for="sender">From : </label>
<input type="text" name="from" id="sender">
</br>
<label for="subject">Subject : </label>
<input type="text" name="subject" id="subject">
</br>
<label for="message">Your message : </label>
<input type="text" name="message" id="message">
</fieldset>
<p>
<input type="submit" value="Send"/>
<input type="reset" value="Cancel"/>
</p>
</form>
<?php
if(isset($_POST['from'])) {
$to = "*********@gmail.com";
$from = $_POST['from'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = "From: $from\n";
mail($to, $subject, $message, $headers);
}
?>
</body>
</html>