【问题标题】:PHP form blocking domainPHP表单阻止域
【发布时间】:2013-06-24 13:37:12
【问题描述】:

我对 PHP 很陌生(我更偏爱 Ruby),但我公司的网站有一个电子邮件表单,客户可以填写该表单以订购样品。我收到的垃圾邮件主要来自@yahoo 域。是否有可以在我的 formmailer.php 文件中插入的 sn-p 代码,它可以阻止来自 Yahoo 的人将某些内容提交到表单中?

感谢您的任何建议!

更新:

<form action="formmailer.php" method="post" id="contact" style="margin-bottom: 0;" onsubmit="return math_check()"> 

对于使用的脚本

<script type="text/javascript">
function math_check(){
var nr = document.getElementById("math_check").value;
 if (nr != 7) {return false;}
 else {return true;}
}
</script>

我确实必须去研究一下这方面的情况,这样我才能有一个更好的未来计划。感谢您的所有帮助。

【问题讨论】:

  • 不适合这样的域。最好添加验证码或简单的 3 + 4 = ?在javascript中
  • 因此您的公司想要拒绝来自拥有 Yahoo! 的客户的所有订单电子邮件地址?在网站中实施之前,您可能需要与企业确认。
  • 你可以使用像google.com/recaptcha这样的验证码
  • 我想这样做,这样我就不会收到垃圾邮件发送给营销人员,而营销总监希望阻止垃圾邮件,因为我们是 B2B,他只想要业务域。
  • 所以没有可能的客户可以拥有雅虎帐户?!我不会那样做。

标签: php html forms spam mailer


【解决方案1】:

在电子邮件地址中搜索域:

if (preg_match("/@yahoo/", $email)){
  //Yahoo domain detected.
}

【讨论】:

  • 酷,我将如何在我的脚本中实现它?我会直接将我的发件人包装在其中,还是创建一个 if 语句并将邮件脚本用作 else?
【解决方案2】:

将此选项之一添加到您的文件中,而不是阻止整个域:

PHP 解决方案:
(假设您使用带有 POST 方法的表单)

在您的表单文件上:

3 + 4 = &lt;input type="text" id="math_check" value="?" name="math_check" /&gt;

在您的邮件/php 文件中:

$math_check = $_POST["math_check"];
if ( != 7) {die()};

你也可以用 javascript 来做这件事,如果有人错过了数学测试,说起来可能更容易:)

Javascript 解决方案
(Demo here)

在您的 html 上:

<form action="formmailer.php" method="post" id="contact" style="margin-bottom: 0;" onsubmit="return false;">
    <input type="text" id="math_check" />
    <button type="submit" />Submit</button>
</form>

以及仅当数字为 7 时才会提交的 javascript:

window.onload = function () {
var form = document.getElementById("contact");
function math_check() {
    var nr = document.getElementById("math_check").value;
    if (nr != 7) {
        return false;
    } else {
        form.submit();
    }
}
form.addEventListener("submit", math_check, false);

};

【讨论】:

  • 我可以把它放在我的 PHP 表单中的任何地方吗?我猜这些是全局变量。
  • 我实际上决定使用您的 JS 解决方案会更容易,谢谢。虽然现在当我提交表单时,无论我在 math_check 输入中输入什么,它仍然会发送表单,但我将在原始帖子中使用的代码作为更新。再次感谢您的帮助。
  • @GeorgeOffley,很好,我很有帮助。我发布了与您的代码匹配的更新答案以及演示。让我知道它是否适合您。
【解决方案3】:

我相信您可以只检查电子邮件地址表单的输入字符串并检查是否存在“雅虎”这个词,就像 Jaris 的回答一样,但这很疯狂,因为任何真正的雅虎用户!电子邮件将被阻止。您可能应该实施某种 CAPTCHA,例如 reCAPTCHA,以阻止垃圾邮件机器人填写您的表单。

如果您不喜欢 CAPTCHA,您可以尝试其他方法来检测是否是真人提交表单,例如简单的数学问题(虽然这些问题很容易被破解,但如果它是一个低流量的网站至少会阻止简单的垃圾邮件机器人)。您还可以使用蜜罐字段,或者您可以限制可以提交表单的次数。检查 this page 以了解 CAPCTHA 的其他替代方案。

我并不是说这会万无一失,但它比阻止任何碰巧使用雅虎电子邮件地址的可怜人要好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多