-2
私はクライアントのウェブサイト上の電子メールフォームを扱ういくつかのコードを手渡してきました。ここにコードがあります。PHPでSMTPヘッダ操作にどのように対処できますか?
<?php
$not_found = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]/404";
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
if($_POST && isset($_POST['emailForm'])) {
require_once 'lib/swift_required.php';
$site_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]";
$from_email = $_POST['FromEmail'];
$first_name = $_POST['FirstName'];
$to_email = $_POST['ToEmail'];
$transport = Swift_SmtpTransport::newInstance('localhost', 25);
$mailer = Swift_Mailer::newInstance($transport);
if($_POST['emailForm'] == 'share') {
$subject = $first_name . ' wants to share some info about acne treatment';
$email_body = file_get_contents('templates/share.html');
$email_body = str_replace(
array('[BASEURL]', '[SENDER NAME]'),
array($site_url, $first_name),
$email_body
);
$message = Swift_Message::newInstance($subject)
->setFrom($from_email)
->setTo($to_email)
->setBody($email_body);
$message->addPart($email_body, 'text/html');
}
if($_POST['emailForm'] == 'ddg') {
$file_name = 'pdf/Dermatologist_Discussion_Guide.pdf';
$subject = 'Your Dermatologist Discussion Guide';
$email_body = file_get_contents('templates/ddg.html');
$email_body = str_replace(
array('[BASEURL]'),
array($site_url),
$email_body
);
$message = Swift_Message::newInstance($subject)
->setFrom($from_email)
->setTo($to_email)
->setBody($email_body);
$message->addPart($email_body, 'text/html');
$message->attach(Swift_Attachment::fromPath($file_name));
}
if($mailer->send($message)){
$success = true;
} else {
$success = false;
}
} else {
header('Location: ' . $not_found);
}
echo json_encode($success);
} else {
header('Location: ' . $not_found);
}
?>
明らかに、SMTPヘッダー操作から保護されません。私はOWASPを見て、どのように悪用されたのかを列挙しましたが、何の対策も挙げていませんでした。誰でも手伝ったり、いくつかのリソースをリンクできますか?前もって感謝します。
いいえ、すべてのユーザー入力の検証について – rtfm