电子邮件垃圾邮件问题

时间:2012-05-02 22:12:32

标签: php email spam

我将我的第一个网站放在网上,我对电子邮件垃圾邮件感到担忧。网站的某些部分有反馈表单(电子邮件未显示),而其他一些页面则显示电子邮件。 。 。

我听说过人们谈论电子邮件Bots在众多网站上爬行并将其发送给他们致死。

请您就此问题提出什么建议。

请原谅我,如果这个地方在我看来最好的地方问这个问题。我在这里很新。

感谢您的时间和耐心。

4 个答案:

答案 0 :(得分:0)

在表单中添加验证码可以帮助很多!这是一个很好的:ReCaptcha

答案 1 :(得分:0)

您可以使用描述符替换部分电子邮件这么简单......

foo[at]bar.com
foo@bar(dot)com
foo[at]bar[dot]com

...或者只是将电子邮件显示为图片。一切都取决于你想要投入的努力程度,以及你用户最有用的东西

答案 2 :(得分:0)

以下是摆脱垃圾邮件的方法。

编辑: 在我的朋友@ RamenChef的请求中,将示例代码放在这里。

假设你有一个密码重置/丢失密码页面容易受到垃圾邮件攻击,你可以这样做。示例代码如下。

尝试发送forge请求或尝试重播请求。

index.html - 查看

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>App secured from Spamming.</title>
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script type="text/javascript">

        $(document).ready(function () {
            $("form").submit(function (event) {
                // Stop form from submitting normally
                event.preventDefault();
                /* Serialize the submitted form control values to be sent to the web server with the request */
                var formValues = $(this).serialize();
                // Send the form data using post
                $.post("test.php", formValues, function (data) {
                    // Display the returned data in browser
                    $("#result").html(data['message']);
                });
            });
        });
    </script>
    <script>
        $(window).load(function(){
            $.post("test.php", function (data) {
                // Display the returned data in browser
                $('#token').val(data['token']);
                $("#result").html('<br>token generated --> '+data['token']);
            });
        });
    </script>
</head>
<body>
<form>
    <p>Forgot password ?</p>
    <label>Email:
        <input type="email" name="email">
        <input type="hidden" name="token" id="token" >
    </label>
    <br><br>
    <input type="submit" value="Send">
</form>
<div id="result"></div>
</body>
<footer style="text-align: center">Try clicking the Send button multiple times and the request is entertained only <b>ONCE for a session.</b></footer>

</html>

test.php {服务器端}

<?php
session_start();
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
$email = isset($_POST["email"]) ? $_POST["email"] : "1";
$token = isset($_POST["token"]) ? $_POST["token"] : "1";

$data = array();


if ($email == 1 && $token == 1) {
    $serverToken = getToken(30);
    //generate token

    $_SESSION["current-token"] = $serverToken;
    $data['token'] = $serverToken;
    echo json_encode($data);
} else {
    if ($_SESSION["current-token"] == $token) {
        //lets process the valid request
        $data['message'] = 'Password reset link sent to ' . $email;
        $serverToken = getToken(30);

        //generate token
        $_SESSION["current-token"] = $serverToken;
        echo json_encode($data);
    } else {
        $data['message'] = 'false client' . '  ----' . $_SESSION["current-token"];
        echo json_encode($data);
    }

}


function getToken($length)
{
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet .= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet .= "0123456789";
    $max = strlen($codeAlphabet); // edited

    for ($i = 0; $i < $length; $i++) {
        $token .= $codeAlphabet[crypto_rand_secure(0, $max)];
    }

    return $token;
}

function crypto_rand_secure($min, $max)
{
    $range = $max - $min;
    if ($range < 1) return $min; // not so random...
    $log = ceil(log($range, 2));
    $bytes = (int)($log / 8) + 1; // length in bytes
    $bits = (int)$log + 1; // length in bits
    $filter = (int)(1 << $bits) - 1; // set all lower bits to 1
    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd = $rnd & $filter; // discard irrelevant bits
    } while ($rnd >= $range);
    return $min + $rnd;
}

答案 3 :(得分:-1)

虽然不是万无一失,但另一种策略是在表单中使用隐藏字段。大多数机器人会盲目地填写它。检查是否已填写,如果是,请不要让表单提交。

        if ($_POST["bait"]!='') {
            header("location: http://www.google.com");
            exit;
               } else {