我将我的第一个网站放到网上,我担心垃圾邮件。网站的某些部分具有反馈表(未显示电子邮件),而其他一些页面则显示了电子邮件。. .
我听说人们谈论电子邮件机器人在许多网站上爬行并将它们发送到死亡的垃圾邮件中。
请问您对这个问题有什么建议。
如果这个地方在我看来是问这个问题的最佳地方,请原谅我。我在这里很新。
感谢您的时间和耐心。
在表单中添加验证码会有很大帮助!这是一个很好的:ReCaptcha
您可以做一些简单的事情,例如用描述符替换部分电子邮件......
foo[at]bar.com
foo@bar(dot)com
foo[at]bar[dot]com
...或者只是将电子邮件显示为图像。一切都取决于您想要投入的努力程度,以及您的用户最有用的东西
这是您摆脱垃圾邮件的方法。
编辑:应我朋友@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>
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;
}
虽然不是万无一失,但另一种策略是在表单中使用隐藏字段。大多数机器人会盲目地填写它。检查是否填写,如果填写,则不允许表单提交。
if ($_POST["bait"]!='') {
header("location: http://www.google.com");
exit;
} else {