Php 电子邮件垃圾邮件问题

Php 电子邮件垃圾邮件问题,php,email,spam,Php,Email,Spam,我把我的第一个网站放在网上,我担心垃圾邮件。网站的某些部分有反馈表(不显示电子邮件),而其他一些页面则显示电子邮件 我听到人们谈论电子邮件机器人在许多网站上爬行,并将它们滥发至死亡 请问你对这个问题有什么建议 如果我觉得这个地方不是问这个问题的最佳地方,请原谅。我是新来的 感谢您的时间和耐心。在表单中添加验证码会有很大帮助!这里有一个很好的例子:在表单中添加验证码会有很大帮助!这里有一个很好的例子:你可以做一些简单的事情,比如用描述符替换部分电子邮件 foo[at]bar.com foo@bar

我把我的第一个网站放在网上,我担心垃圾邮件。网站的某些部分有反馈表(不显示电子邮件),而其他一些页面则显示电子邮件

我听到人们谈论电子邮件机器人在许多网站上爬行,并将它们滥发至死亡

请问你对这个问题有什么建议

如果我觉得这个地方不是问这个问题的最佳地方,请原谅。我是新来的


感谢您的时间和耐心。

在表单中添加验证码会有很大帮助!这里有一个很好的例子:

在表单中添加验证码会有很大帮助!这里有一个很好的例子:

你可以做一些简单的事情,比如用描述符替换部分电子邮件

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

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

你可以做一些简单的事情,比如用描述符替换部分电子邮件

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

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

尽管不是傻瓜式的,但另一种策略是在表单中使用隐藏字段。大多数机器人会盲目地填写。检查是否已填写,如果已填写,则不允许提交表格

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

虽然不是傻瓜式的,但另一个策略是在表单中使用隐藏字段。大多数机器人会盲目地填写。检查是否已填写,如果已填写,则不允许提交表格

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

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

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

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

尝试发送伪造请求或尝试重播请求

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>

应用程序从垃圾邮件保护。
$(文档).ready(函数(){
$(“表格”)。提交(功能(事件){
//阻止表单正常提交
event.preventDefault();
/*序列化要随请求发送到web服务器的已提交表单控件值*/
var formValues=$(this).serialize();
//使用post发送表单数据
$.post(“test.php”、FormValue、函数(数据){
//在浏览器中显示返回的数据
$(“#结果”).html(数据['message']);
});
});
});
$(窗口)。加载(函数(){
$.post(“test.php”,函数(数据){
//在浏览器中显示返回的数据
$('#token').val(数据['token']);
$(“#结果”).html('
生成的令牌-->'+数据['token']); }); }); 忘记密码了

电邮:

尝试多次单击“发送”按钮,一次会话只接受一次请求。
test.php{server-side}

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

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

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

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

尝试发送伪造请求或尝试重播请求

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>

应用程序从垃圾邮件保护。
$(文档).ready(函数(){
$(“表格”)。提交(功能(事件){
//阻止表单正常提交
event.preventDefault();
/*序列化要随请求发送到web服务器的已提交表单控件值*/
var formValues=$(this).serialize();
//使用post发送表单数据
$.post(“test.php”、FormValue、函数(数据){
//在浏览器中显示返回的数据
$(“#结果”).html(数据['message']);
});
});
});
$(窗口)。加载(函数(){
$.post(“test.php”,函数(数据){
//在浏览器中显示返回的数据
$('#token').val(数据['token']);
$(“#结果”).html('
生成的令牌-->'+数据['token']); }); }); 忘记密码了

电邮:

尝试多次单击“发送”按钮,一次会话只接受一次请求。
test.php{server-side}

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

不要把你的电子邮件地址放在显眼的地方。使用CAPTCHA您可以混淆电子邮件地址()。这不是万无一失的,但它将消除许多基本的垃圾邮件。我永远不会在我的网站上显示我的电子邮件地址,只使用联系人表单。你怎么能在别人使用的网站上不显示任何电子邮件地址呢?如果不显示电子邮件地址,使用联系人表单,则电子邮件地址将永远看不到。不要将你的电子邮件地址放在显眼的地方。使用CAPTCHA您可以混淆电子邮件地址()。它不是傻瓜式的,但它将消除许多基本的垃圾邮件。我永远不会在我的网站上显示我的电子邮件地址,只是使用联系人表单。你怎么能在别人使用的网站上不显示任何电子邮件地址呢?通过不显示它们,使用联系方式,这样就看不到电子邮件地址。听起来他们希望在某些地方显示电子邮件,只是因为需要某样东西,并不意味着这是一个好主意。这项针对大约10位潜在客户的调查显示。他们说,在网站上显示电子邮件给了网站一点可信度。显示电子邮件没什么错。一切都取决于上下文。我向你挑战,如果你发现任何一个商业网站没有至少一个公开的电子邮件地址,那是什么?你一定是认真的。请看“联系我们”以了解此信息