2

php を使用してキャプチャした情報をメールで送信する HTML フォームがあります。

最近、有益な情報が含まれていないこれらの電子メールを多数受信しています。キャプチャやその他のことを気にしないので、これはボットがランダムなフォームを送信しただけだと思い、却下しました。

今日、これらの電子メールの 1 つが届いたとき、ブラウザからフォームを送信した場合、受信した電子メールの内容を再現する方法がないことに気付きました。何かを含むフィールドがいくつかあるためです。ドロップダウン メニューのデフォルト値。

ボットが (それがこれを行っている場合) フォームを送信してデフォルト値を削除する方法だと思いますか? それとも、これらが正当なユーザーである可能性が高く、私の PHP コードにバグがあり、何らかの理由でメールフォームが壊れている可能性がありますか?

私のphpコードは基本的にループしてフィールドが空かどうかをチェックし、そうでない場合はメール本文に追加します。

編集:

私が使用するphpコードは次のとおりです。

 $valid = new Validation($_POST);
if($CONTINUE = $valid->success) {
    $to = "myemail";
    $subject = "Subject";
    $from_email = $to;
    $from_name = $name;
    $headers = "From: $from_name<$from_email>\n"; 
    $headers .= "Reply-To: <$email>\n";
    $headers .= "Return-Path: <$from_email>\n"; 



    $body = "The following information we recently submitted\n";

    $qstring="";

    unset($_POST['required_fields']);
    reset($_POST);
    while(list($key, $value) = each($_POST)) {
        if(!empty($value)) {
            $body .= proper_form($key) . ":  " . stripslashes($value) ."\n";
            $qstring .= "&".$key."=".$value;
        }   
    }

    mail($to,$subject,$body,$headers);
4

2 に答える 2

1

どのようなボット (おそらくクローラー) が呼び出しに追加のパラメーターを含めているかを知っているので、サーバーへの直接的な攻撃ではないと推測できますが、mysql エスケープ (または同様の攻撃) の弱点を狙っている可能性があります。

私が注目したいいくつかのこと:

1) ドメインが以前に他の誰かによって所有されていた場合、ランダムな Web リンクを避けるために、(GET ではなく) ページのコンテンツを POST します。

2) $_POST に期待するフィールド以外のものが含まれている場合は、その投稿全体を無視します (自分でフィールドを指定するか、誰かがグリースモンキー スクリプト (または類似のもの) を使用してページにフィールドを追加しない限り、ブラウザーは追加のフィールドを送信しません)。これは、次のような方法で確認できます。

$allowedParams = array('name', 'email', 'subject', 'etc');
foreach($_POST as $param=>$val) {
    if(!in_array($param, $allowedParams))
    {
       die();
    }
}

3) 一般的なボットのリファラーおよび/またはユーザーエージェントを確認し、データを拒否するか、別の方法で処理します。防弾ではありませんが、便利です。

4) このスクリプトが Ajax 経由で呼び出されている場合は、Cross Origin Resource Sharingを調べてください。

5)本当に本当に必要でない限り、キャプチャを使用しないでください(おそらく使用しないでください)。キャプチャを決定する場合は、"Are you human? (yes と入力)" のような単純なものを使用し、"yes" のテキスト ボックスを使用します。それらのクレイジーの1つではありません。この混乱したキャプチャを読んでください。

于 2013-05-03T15:15:47.430 に答える