我有一个网店正在运行,每隔几天发送一封空邮件,就像订单一样。这最有可能是google吗?
我有一个名为send2.php的文件,它从会话中获取所有信息,所有帖子数据,并通过邮件发送。之后,它会重定向到“谢谢”页面。
可以并且将谷歌发送空表单只是为了看看send2.php中的什么?什么是防止这种情况发生的最佳方法?
答案 0 :(得分:1)
将名为robots.txt
的文件添加到根目录并将其放入其中:
User-Agent: *
Disallow: /path/to/send2.php
请记住,这不是一个完美的解决方案。这将阻止(合作)网络抓取工具访问您的网页。
参考:http://en.wikipedia.org/wiki/Robots_exclusion_standard
更好的解决方案涉及用户身份验证(确保代理提示您的脚本不是机器人)。
答案 1 :(得分:1)
正如其他人所提到的那样,使用empty()
支票和robots.txt
可以通过各种途径绕过良性机器人。但是,这些依赖于尊重您网站的机器人。许多机器人会尝试在表单中注入值(意味着empty
检查不起作用)并且这些机器人不关心robots.txt
(如果robot.txt
我不会感到惊讶:Disallow
实际上鼓励鼓励某些机器人根据您可能拥有敏感内容的假设定位您的网站......但这只是推测。)
你最好的将是一个“人类检查”。要么实施captcha/recaptcha解决方案,要么在允许提交之前计算机难以解决或解析/理解的其他逻辑测试:“这是什么动物?[普通动物的照片]”,“解决这个简单的等式[( 12/4)+1]“等等。
这些检查必须是服务器端。它们通常涉及在首次加载表单时为挑战任务设置一个$_SESSION
变量,然后在提交表单后检查他们为该会话变量输入的值。 从不依靠Javascript为您进行验证(正如您在x711Li评论中提到的那样)。 Javascript验证纯粹是为了方便用户(因此他们可以在提交之前查看问题)或减少服务器上的负载(因此您不必运行/记录大量失败的提交)。任何人或机器人都可以绕过或操纵Javascript验证,因此请确保您最终使用的任何方法都涉及服务器端检查。
答案 2 :(得分:0)
如果你收到的邮件是空白值,因为整个会话期间没有设置值,那么为什么不在发送邮件之前检查这些值,真正的罪魁祸首很可能是爬虫,其中很多(inc bingbot)不会收听robots.txt文件,加上机器人文件是黑客寻找信息收集的第一个地方。
<?php
if(!empty($_SESSION['some_info'])){
mail(...);
}
?>