0

クライアント側の検証(jqueryベース)を備えた単純なphpメールスクリプトがあり、正常に動作します。しかし、誰かが直接投稿することがあり、空のスパムメールをたくさん受け取りました。

一部のフィールドが null (空) でないかどうかを確認する方法。たとえば、「usermail」変数です。

<?php
$sendto   = "youremail@youremail.com";
$usermail = $_POST['email'];
$content  = nl2br($_POST['msg']);

$subject  = "New Feedback Message";
$headers  = "From: " . strip_tags($usermail) . "\r\n";
$headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html;charset=utf-8 \r\n";

$msg  = "<html><body style='font-family:Arial,sans-serif;'>";
$msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>New User Feedback</h2>\r\n";
$msg .= "<p><strong>Sent by:</strong> ".$usermail."</p>\r\n";
$msg .= "<p><strong>Message:</strong> ".$content."</p>\r\n";
$msg .= "</body></html>";


if(@mail($sendto, $subject, $msg, $headers)) {
    echo "true";
} else {
    echo "false";
}

?>

これは機能していません:

<?php
if(!empty($usermail)) {
$sendto   = "mymail@mail.com";
$usermail = $_POST['email'];
$content  = nl2br($_POST['msg']);

$subject  = "New Feedback Message";
$headers  = "From: " . strip_tags($usermail) . "\r\n";
$headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html;charset=utf-8 \r\n";

$msg  = "<html><body style='font-family:Arial,sans-serif;'>";
$msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>New User Feedback</h2>\r\n";
$msg .= "<p><strong>Sent by:</strong> ".$usermail."</p>\r\n";
$msg .= "<p><strong>Message:</strong> ".$content."</p>\r\n";
$msg .= "</body></html>";


if(@mail($sendto, $subject, $msg, $headers)) {
        echo "true";
} else {
        echo "false";
}
}
?>
4

3 に答える 3

0

さて、あなたは機能を使うことができますempty()

if (empty($_POST['email']) || empty($_POST['msg'])) {
    exit();
}

より良い方法は、適切な電子メールの検証とメッセージの検証を行うことです。例えば:

  • メッセージは特定の長さよりも長くする必要があります (例: 10 文字を超える必要があります)
  • @有効な形式の電子メールを提供する必要があります (たとえば、確認する最も簡単な方法ですが、正確性に欠ける方法は、存在するかどうかを確認することです。
于 2013-09-18T01:07:55.047 に答える
0

!empty($usermail)またはを使用し$usermail !== '';ます。また、ページも$_POST['submitName']同様であることを確認する必要があります。

于 2013-09-18T01:08:30.130 に答える