我之前在StackOverflow上遇到的问题是有人每隔几个小时向我发送数百封垃圾邮件。现在,我将脚本固定在服务器端,但是第二天早晨,我仍然收到30封电子邮件或其他内容,托管公司为我的FTP提供了一个新密码,并将索引文件移至了备份地图(离线网站),他们说由于以下可疑脚本而被黑客入侵。他们说:“这通常是通过您网站上的泄露脚本(一个过时的脚本)发生的。这是什么意思?他们在电子邮件中说,此脚本文件中包含某些内容。因为我在服务器端使用了reCaptcha,所以缺少一些东西吗?
<?php
if(isset($_POST['g-recaptcha-response'])){
$captcha=$_POST['g-recaptcha-response'];
}
/* OUTCOMMENTED CODE BELOW DOESN'T LET FORM SEND IF EVERYTHING IS CHECKED????
if(!$captcha){
echo '<h2>Check captcha .</h2>';
exit;
}*/
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=(SECRETKEY)&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false)
{
echo '<span id="status" style="font-size:1vmax;color:red;">ReCaptcha ERROR</span>';
}else
{
if( isset($_POST['n']) && isset($_POST['e']) && isset($_POST['mn']) &&
isset($_POST['m']) ){
$n = $_POST['n']; // HINT: use preg_replace() to filter the data
$e = $_POST['e'];
$mn = $_POST['mn'];
$m = nl2br($_POST['m']);
$to = "gesternl@gester.nl";
$from = $e;
$subject = 'Contact Formulier-eng';
$message = '<b>Naam:</b> '.$n.' <br><b>Email:</b> '.$e.' <br><b>Mobiel-nummer:</b> '.$mn.' <p>'.$m.'</p>';
$headers = "Van: $from\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
if( mail($to, $subject, $message, $headers) ){
echo "success";
} else {
echo "The server failed to send a message. Please try again later. Thank you!";
}
}
}
?>
我刚刚再次上传了它,看看现在会发生什么。有人可以帮我确保此文件对黑客的安全。没有人真正在上一个问题中提供帮助,但只提供了没有代码的建议(我是nooby)。
(第8行周围过时的注释代码不起作用,我不明白,有人知道为什么有人可以入侵它的原因吗?)
是的,recaptcha的HTML中的代码与公钥很好地链接了
答案 0 :(得分:3)
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=(SECRETKEY)&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false)
这段代码片段很不幸,现在已经浪费了很多(糟糕的)教程。它不提供任何保护-条件始终为false,因为$response.success
被解释为将常量success
与reCaptcha API返回的API响应串联。无论用户输入什么,这都将使CAPTCHA始终被视为有效。
使用Google reCaptcha库来验证来自reCaptcha API的响应。可通过以下网址获得:https://github.com/google/recaptcha
答案 1 :(得分:2)
您不是要对用户输入进行消毒。您应该立即修复此问题,因为它是安全缺陷。
答案 2 :(得分:0)
您在以下行中出错:if($response.success==false)
$response=file_get_contents("......");
$result = json_decode($response);
if($result->success==false){