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位潜在客户的调查显示。他们说,在网站上显示电子邮件给了网站一点可信度。显示电子邮件没什么错。一切都取决于上下文。我向你挑战,如果你发现任何一个商业网站没有至少一个公开的电子邮件地址,那是什么?你一定是认真的。请看“联系我们”以了解此信息