我将我的第一个网站放在网上,我对电子邮件垃圾邮件感到担忧。网站的某些部分有反馈表单(电子邮件未显示),而其他一些页面则显示电子邮件。 。 。
我听说过人们谈论电子邮件Bots在众多网站上爬行并将其发送给他们致死。
请您就此问题提出什么建议。
请原谅我,如果这个地方在我看来最好的地方问这个问题。我在这里很新。
感谢您的时间和耐心。
答案 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 {