мой серверный PHP все еще был взломан после reCaptcha (сотни спам-писем) - PullRequest
0 голосов
/ 26 июня 2018

Мой предыдущий вопрос о 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!";
        }
    }
        }
    ?>

Я просто загрузил его снова, чтобы посмотреть, что произойдет сейчас. Может кто-нибудь, пожалуйста, помогите мне сделать этот файл безопасным для хакера. Никто действительно не помог в предыдущем вопросе, а только дал совет без кода (а я нуби).

(некомментированный код в строке 8 не работает, что я не понимаю, кто-то знает, почему, может быть, кто-то может взломать его?)

И да, код в HTML для recaptcha хорошо связан с открытым ключом

Ответы [ 3 ]

0 голосов
/ 26 июня 2018
  1. Вы должны очистить пользовательский ввод, как сказал @kevin Cai
  2. У вас ошибка в строке: if($response.success==false)

    $response=file_get_contents("......");
    
    $result = json_decode($response);
    
    if($result->success==false){
    
0 голосов
/ 26 июня 2018
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=(SECRETKEY)&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false)

Этот фрагмент кода является прискорбной чепухой, которая нашла свое отражение во многих (ужасных) уроках. Он не обеспечивает никакой защиты - условие всегда ложно, поскольку $response.success интерпретируется как объединение константы success с ответом API, возвращаемым API reCaptcha. Это приведет к тому, что CAPTCHA всегда будет считаться действительной, независимо от ввода пользователя.

Используйте библиотеку Google reCaptcha для проверки ответов от API reCaptcha. Это доступно в: https://github.com/google/recaptcha

0 голосов
/ 26 июня 2018

Вы не дезинфицируете пользовательский ввод, например. Вы должны исправить это сразу же, так как это уязвимость системы безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...