0

私はこの投稿を読みました:良い目に見えないキャプチャとは何ですか?Webフォームの非表示フィールドを使用して、基本的なボットがWebサイトのフォームメールを介してスパムメールでWebサイトを攻撃するのを防ぐ方法について。現在、フォームメールの処理にphpスクリプトを使用しています。見つけた「bulletproffwebform」チュートリアルに従ってスクリプトを作成しました。次のようになります。

<?php
// Pick up the form data and assign it to variables
$name = $_POST['name'];
$email = $_POST['email'];
$topic = $_POST['topic'];
$comments = $_POST['comments'];

// Build the email (replace the address in the $to section with your own)
$to = 'hello@cipherbunny.com';
$subject = "New message: $topic";
$message = "$name said: $comments";
$headers = "From: $email";

// Data cleaning function
  function clean_data($string) {
  if (get_magic_quotes_gpc()) {
  $string = stripslashes($string);
  }
  $string = strip_tags($string);
  return mysql_real_escape_string($string);
}

// Mail header removal
function remove_headers($string) { 
  $headers = array(
    "/to\:/i",
    "/from\:/i",
    "/bcc\:/i",
    "/cc\:/i",
    "/Content\-Transfer\-Encoding\:/i",
    "/Content\-Type\:/i",
    "/Mime\-Version\:/i" 
  ); 
  $string = preg_replace($headers, '', $string);
  return strip_tags($string);
} 

// Pick up the cleaned form data
$name = remove_headers($_POST['name']);
$email = remove_headers($_POST['email']);
$topic = remove_headers($_POST['topic']);
$comments = remove_headers($_POST['comments']);

// Send the mail using PHPs mail() function
mail($to, $subject, $message, $headers);

// Redirect
header("Location: http://foobar/success.html"); 

このスクリプトを変更して、識別子「other_email」の非表示フィールドに入力した場合に、フォームの電子メールが送信されないようにします。上記のコードをifステートメントでラップして、フィールドが完全かどうかを確認するのと同じくらい簡単だと思います。「//フォームデータを取得して変数に割り当てる」コードの下にこれを追加してみました。

$testBot = $_POST['other_email'];

次に書く:

if(other_email == "") //If other_email form section is blank then... 
{
    run all the code above inserted here;
}
else
{
 Don't know what I should put here to stop it posting, yet still show the success form so 
 the spam bot don't know 

}

どんな助けでも大歓迎です。私はPHPの知識があまりないので、それについて学び始めたばかりで、フォームメールが良いスタートになると思いました。

PHPでこれを機能させるにはどうすればよいですか?

4

2 に答える 2

1
if(other_email == "") //If other_email form section is blank then... 
{
    run all the code above inserted here;
}
else
{
 header("Location: http://foobar/success.html");

}

それを非常に単純に保つと、それはあなたのために働くでしょう..

実際には、

  • 何も送信/メールしないでください...スパムはありません
  • 単純なボットはそれを実行したのと同じように処理します...

email_sent=true成功ページでphpを使用できる場合は、セッション変数を設定し(ボットに、またはなどのようにその仕事をしたと思わせるためsuccess=true)、成功ページでその変数を使用します。これはelse case、ボットがフォームを送信した場所で行います。

于 2013-03-02T23:16:24.210 に答える
1

フィールド付きのメッセージを送信するという意味ですか?
これを試して:

<?php
// Pick up the form data and assign it to variables
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$topic = $_REQUEST['topic'];
$comments = $_REQUEST['comments'];

// Build the email (replace the address in the $to section with your own)
if($name !== null && $email !== null && $topic !== null && $comments !== null){
$to = 'hello@cipherbunny.com';
$subject = "New message: $topic";
$message = "$name said: $comments";
$headers = "From: $email";

// Data cleaning function
  function clean_data($string) {
  if (get_magic_quotes_gpc()) {
  $string = stripslashes($string);
  }
  $string = strip_tags($string);
  return mysql_real_escape_string($string);
}

// Mail header removal
function remove_headers($string) { 
  $headers = array(
    "/to\:/i",
    "/from\:/i",
    "/bcc\:/i",
    "/cc\:/i",
    "/Content\-Transfer\-Encoding\:/i",
    "/Content\-Type\:/i",
    "/Mime\-Version\:/i" 
  ); 
  $string = preg_replace($headers, '', $string);
  return strip_tags($string);
} 

// Pick up the cleaned form data
$name = remove_headers($_POST['name']);
$email = remove_headers($_POST['email']);
$topic = remove_headers($_POST['topic']);
$comments = remove_headers($_POST['comments']);

// Send the mail using PHPs mail() function
mail($to, $subject, $message, $headers);

// Redirect
header("Location: http://foobar/success.html"); 
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>Send</title>
</head>

<body>
<form action="#" method="POST">
Name     : <input type="text" name="name" /><br />
Email    : <input type="text" name="email" /><br />
Topic    : <input type="text" name="topic" /><br />
Comments : <textarea name="comments"></textarea><br />
<input type="submit" value="Send" />
</form>
</body>
</html>
于 2013-03-02T23:35:09.430 に答える