我在使用prestashop联系表单发送垃圾邮件的机器人时遇到了问题。 我一直在寻找一个解决方案,最后我建立了自己的第二代码。
首先,我添加了一个解决了部分问题的reCaptcha。 Bot无法向服务器发送成功的请求,但机器人仍然能够搞砸我的统计数据。
要添加reCaptcha,请按照以下说明操作:
1: enter reCaptcha and generate the keys with your domain
2: Add <script src=https://www.google.com/recaptcha/api.js'></script> to header.tp just before the </head> tag
3: Add <div class="g-recaptcha" data-sitekey="[public Google key]"></div> to contact-form.tpl just before</form> tag
4: go to /controllers/front/ContactController.php and just efter this line : $this->errors[] = Tools::displayError('Bad file extension');
add:
} else if (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))){
$this->errors[] = Tools::displayError('Captcha not verified');
}
机器人能够发送varius IP的请求表格(每5分钟有一个新的IP)这就是为什么手动阻止IP无能为力。
Bot正在向我的控制器发送一份填写好的表格: 控制器/前/ ContactController.php
在&#34之后立即将以下代码添加到您的控制器; if(Tools :: isSubmit(&#39; submitMessage&#39;)){&#34;:
$date = date("G:i"); // get actual hour and minute
$file = "ip.txt";
$ip = $_SERVER['REMOTE_ADDR'] ;
if(date('i:s') == '00:00' || date('i:s') == '15:00' || date('i:s') == '30:00' || date('i:s') == '45:00' ){ // every 15 minutes
file_put_contents($file, ""); // clear the file
}
if( strpos(file_get_contents("ip.txt"),$ip) !== false) {
$f = fopen(".htaccess", "r+");
$oldstr = file_get_contents(".htaccess");
$str_to_insert = "deny from " . $ip.PHP_EOL;
$specificLine = "allow from all";
while (($buffer = fgets($f)) !== false) {
if (strpos($buffer, $specificLine) !== false) {
$pos = ftell($f);
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
file_put_contents(".htaccess", $newstr);
break;
}
}
fclose($f);
}
以及&#34; $ this-&gt; errors [] =工具:: displayError(&#39; Captcha未经过验证&#39;);&#34; :
file_put_contents($file,$date .' IP: ' , FILE_APPEND);
file_put_contents($file, $ip.PHP_EOL, FILE_APPEND);
此代码的作用是阻止.htaccess在15分钟内使用此控制器失败两次以上的每个IP。
一周后机器人放弃了:)