PHP表单阻塞域

时间:2013-06-24 13:37:13

标签: php html forms spam mailer

我对PHP很新(我更偏爱Ruby),但我公司的网站有一个电子邮件表格,客户可以填写订购样品。我从@yahoo域获取垃圾邮件。我可以在我的formmailer.php文件中插入一段代码,这些代码可以阻止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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

在您的表单文件中:

3 + 4 = <input type="text" id="math_check" value="?" name="math_check" />

在您的邮件/ 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);

};

答案 2 :(得分:0)

我确定你可以查看电子邮件地址表单的输入字符串,然后检查“雅虎”这个词是否存在,就像Jaris的答案一样,但那很疯狂,因为任何有雅虎的真正用户!电子邮件将被封锁。您应该实施某种类型的CAPTCHA,例如reCAPTCHA,以阻止Spambots填写您的表单。

如果您不喜欢CAPTCHA,您可以尝试其他方式来检测是否是提交表单的真人,例如简单的数学问题(尽管这些问题可以很容易地解决,但如果它是一个低流量站点,它将至少停止简单的垃圾邮件机器人)。您也可以使用Honeypot字段,也可以限制表单提交的次数。检查this page以获取CAPCTHA的其他替代方案。

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