-6

現在、スパムが大量に届いています。次の行を追加しました。

if ($field_budget == "" || $field_timeline == "" || $field_email == "" || $field_name == "") { echo "Please fill out all required form details, thank you!"; } else {

これは数週間は役に立ちましたが、今ではスパマーが戻ってきています。私のフォームを改善するためのシンプルでエレガントな方法は何ですか (以下の完全なコード)?

<?php
$field_name = $_POST['cf_name'];
$field_email = $_POST['cf_email'];
$field_website = $_POST['cf_website'];
$field_company = $_POST['cf_company'];
$field_budget = $_POST['cf_budget'];
$field_custombudget = $_POST['cf_custombudget'];
$field_timeline = $_POST['cf_timeline'];
$field_message = $_POST['cf_message'];

$mail_to = 'sean@seanduran.com';
$subject = 'Message from a site visitor, '.$field_name;

$body_message = 'Name: '.$field_name."\n";
$body_message .= 'e-mail: '.$field_email."\n";
$body_message .= 'Website: '.$field_website."\n";
$body_message .= 'Company: '.$field_company."\n";
$body_message .= 'Budget: '.$field_budget."\n";
$body_message .= 'Custom Budget: '.$field_custombudget."\n";
$body_message .= 'Timeline: '.$field_timeline."\n";
$body_message .= 'Message: '.$field_message;

$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";

if ($field_budget == "" || $field_timeline == "" || $field_email == "" || $field_name == "") {
    echo "Please fill out all required form details, thank you!";
} else {
    $mail_status = mail($mail_to, $subject, $body_message, $headers);

    if ($mail_status) { ?>
        <script language="javascript" type="text/javascript">
            alert('Thank you for the message. We will contact you shortly.');
            window.location = 'http://seanduran.com';
        </script>
    <?php
    }
    else { ?>
        <script language="javascript" type="text/javascript">
            alert('Message failed. Please, send an email to sean@seanduran.com');
            window.location = 'http://seanduran.com';
        </script>
    <?php
    }
}
?>
4

4 に答える 4

3

あなたは多分トリックを使うことができます-

テキストフィールドを挿入し、CSS (ID) を介して非表示にし、空でなければならないことを確認します。

すべてのスパムボットはフィールドに何かを入力するので、名前「アドレス」などを入力してください...

ボットが入力した場合、エラーを出すことができます...

他のヒントはReCaptchaを使用することです

于 2012-09-14T06:07:30.693 に答える
1

キャプチャを紹介します。スパマーも同様にこれらの解決に長けていますが、これは良い追加手段です。たとえば、reCAPTCHA を見てください。追加するのはそれほど難しくありません (こちらの手順を参照してください)。

于 2012-09-14T06:09:03.647 に答える
0

一般的な変更について

  • すべての投稿データを検証します。ヘッダインジェクションのチェック
  • キャプチャ

良いスタートとして、この記事をチェックしてください: http://www.digital-web.com/articles/bulletproof_contact_form_with_php/

于 2012-09-14T06:09:35.697 に答える
0

名前と電子メール フィールドを次のように変更します。

Name: <input type="text" name="cf_123" />
Email: <input type="text" name="cf_456" />

そのように参照されます:

$field_name  = $_POST['cf_123'];
$field_email = $_POST['cf_456'];

次に、次のフィールドを追加します。

<input type="text" name="name" class="foo" />
<input type="text" name="email" class="foo" />

.. この CSS で:

.foo {
    display : none;
}

次に、この条件を PHP に追加するだけです。

if (!empty($_POST['name']) || !empty($_POST['email'])) {
    return false; // only a bot would see those fields and fill them out. 
}
于 2012-09-14T06:10:06.217 に答える