0

ユーザーがメールフォームに記入するウェブサイトに近日公開のフォームがあり、メールで送信されます。しかし、スパマーがサイトを攻撃し、ヤギなどでフォームをスパムしています。IP禁止は役に立たないので、ヤギなどが含まれている場合は、フォームの送信を停止する必要があります。これがメーラーです。

<?php
$SPOSTI =$_POST[sposti];


if ($SPOSTI=="")
{
    return false;
}

if ($SPOSTI=="goatse.fr")
{
    return false;
}
if ($SPOSTI=="http://www.goatse.info/hello.jpg")
{
    return false;
}
else
{
    $to = "xxx@gmail.com";
    $subject = "xxx";
    $message = "$_POST[sposti] haluaa tiedon kun kotisivut.name avautuu.
    $_POST[ip]";
    $from = "$_POST[sposti]";
    $headers = "From:" . $from;
    mail($to,$subject,$message,$headers);
}
    ?>

電子メールに特定の単語(この場合はgoatse)が含まれている場合、コードの実行をブロックする方法はありますか?

4

4 に答える 4

1

関数/メソッド内で機能するexit、またはdieその代わりに使用する必要があります。return false

if ( $SPOSTI =="" || strpos('goatse', $SPOSTI) !== FALSE)
{
   exit();
}
于 2012-06-24T19:05:01.670 に答える
0

strpos()部分文字列を見つけることができますが、攻撃者が別の迷惑な単語に切り替える可能性があるため、キャプチャセキュリティシステムをお勧めします。

Goatseはここであなたの問題ではありません、それはセキュリティです。

于 2012-06-24T19:05:09.883 に答える
0

stristr これを実現するには、 http://php.net/manual/de/function.stristr.phpを使用できます。キャプチャの方が効率的であるため、キャプチャの使用をお勧めします。一般的な解決策はreCaptchaです。https://developers.google.com/recaptcha/docs/phpもう1つの弱い可能性は、フォームにセキュリティの質問を追加することです。たとえば、「5と5の数字は何ですか?」などです。

于 2012-06-24T19:09:47.617 に答える
0

次のことを試してください。

function is_spam($array, $block_pattern){
    $block = false;
    foreach($array as $k => $v){
        if(preg_match('/.*' . $block_pattern . '.*/', $k) ||
           preg_match('/.*' . $block_pattern . '.*/', $v)){
            $block = true;
            break;
        }
    }

    return $block;
}

Usage: is_spam($_POST, 'goatse');
Returns: true if 'goatse' is found in $_POST

この関数は、のすべてのキーと値で文字列を検索し$array、パターンが見つかった場合$block_patternに戻ります。true

于 2012-06-24T19:18:57.347 に答える