伙计们,
我有一个 html 表单,它将表单数据作为电子邮件发送。不幸的是,垃圾邮件机器人一直在填写表格,并在表格的消息部分发送网站链接和电子邮件地址。
有没有一种方法可以删除网站链接和电子邮件地址时按下“提交”按钮,然后再将其作为电子邮件地址发送?我使用 PHP 将表单数据作为电子邮件消息实际发送。
谢谢并恭祝安康,
托尼
伙计们,
我有一个 html 表单,它将表单数据作为电子邮件发送。不幸的是,垃圾邮件机器人一直在填写表格,并在表格的消息部分发送网站链接和电子邮件地址。
有没有一种方法可以删除网站链接和电子邮件地址时按下“提交”按钮,然后再将其作为电子邮件地址发送?我使用 PHP 将表单数据作为电子邮件消息实际发送。
谢谢并恭祝安康,
托尼
您是否尝试过通过 css 隐藏表单(显示:无)但在 HTML 中像常规表单一样,并称之为电子邮件或常见的东西,如果该表单有数据,那么它一定是机器人。
你可以用 Javascript 做到这一点。问题是需要启用 Javascript 才能发生这种情况,因此您可以想象垃圾邮件机器人在这方面会合作的可能性。
您将不得不在服务器上将其过滤掉。就我个人而言,我会直接拒绝任何包含链接或电子邮件地址的消息。向用户吐出一个错误,但甚至不保存它。
有关在 PHP 中检测垃圾邮件的一些技巧,请阅读无垃圾邮件的可访问表单。
您可能还想考虑使用 CAPTCHA。
这是非常简单的,但你可以建立在它之上,我敢肯定......
尝试添加一张猫或狗的图片,然后让他们输入所示动物的三个字母名称......或类似的东西。进行验证检查,然后从那里开始……便宜又简单的验证码。这样只有人工输入才会输出......
如何使用正则表达式将任何与 Web 链接或电子邮件地址匹配的内容替换为空字符串。
您可以在网络上找到正则表达式示例的音调,只需 google 即可
您必须遍历 $_POST 数组中的每个字段(至少是您不希望在其中包含电子邮件或链接的字段),并根据几个正则表达式对其进行检查。
使用 CAPTCHA 的建议也是一个很好的建议。
无论如何,这是一个糟糕的检查实现:
class ValidationHelper
{
// Regex taken from https://github.com/google-code-export/prado3/blob/master/framework/Web/UI/WebControls/TEmailAddressValidator.php
const EMAIL_REGEX = "#\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*#";
// hacked up regex that I just cooked up - could be hugely improved i'm sure.
const LINK_REGEX = "#(h\s*t\s*t\s*p\s*s?|f\s*t\s*p)\s*:\s*/\s*/#";
public static function containsEmail($value)
{
if (preg_match(self::EMAIL_REGEX, $value))
return true;
return false;
}
public static function containsLink($value)
{
if (preg_match(self::LINK_REGEX, $value))
return true;
return false;
}
}
$errors = array();
foreach ($_POST as $key=>$value) {
// presumably you want at least one email field, yeah?
if ($key != 'email') {
// perhaps you should be running strip_tags over everything if you don't want html and such...
// see http://php.net/strip_tags for more info. without it (or something similar), there's nothing
// to stop people from putting <script type="text/javascript" src="http://notyourdomain.com/~1337skriptkiddy/haxxors.js"></script>
// into your form. even if you might not necessarily ever be displaying this in a scenario
// where it can cause trouble, it's never a bad idea to stop this stuff *before* it gets into your db
$_POST[$key] = $value = strip_tags($value);
if (ValidationHelper::containsEmail($value) || ValidationHelper::containsLink($value))
$errors[] = 'Please ensure the value you entered for '.$fieldNames[$key].' does not contain any links or email addresses';
}
}
if (!empty($errors)) {
// failed - show errors.
}
else {
// success!
}
好吧,如果您真的想打击垃圾邮件,请执行以下步骤:
在表单中放置验证码,这样非人类甚至无法提交表单。一个非常流行的验证码实现是reCAPTCHA。
在字段上做一个strip_tags,这样即使有人手动放置 URL,它也会被删除。
对电子邮件地址进行正则表达式检查并将其删除。从网络上选择一个好的正则表达式,它将选择大多数电子邮件格式。
希望这有帮助。干杯!
大概,您不想接受任何类型的 HTML,只是纯文本?在这种情况下, strip_tags是您的朋友。strip_tags 还允许您指定一些可接受的标签。
我还衷心推荐合并一个标头注入防御脚本。
伙计们,
我尝试使用 strip_tags,它肯定会删除标签,但不会删除“mailto:”或“http://”文本,因此链接仍然是链接。
是否有一个简单的 PHP 命令或例程可以扫描字符串并在字符串的这些部分中将“mailto:”和/或“http://”替换为无害的空字符串“”?
也尝试过谷歌搜索,但我发现的大部分内容都是关于修剪空白等。
抱歉,我对 PHP 有点陌生。
谢谢并恭祝安康,
托尼