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);
}
    ?>

如果电子邮件包含某个单词(在这种情况下是山羊),是否有办法阻止它执行代码

4

4 回答 4

1

您需要使用exitordie代替return falsewhich 在函数/方法中起作用:

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另一种较弱的可能性是在您的表单中添加一个安全问题,例如“五加五等于多少?”。

于 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 回答