Implementacja własnych zabezpieczeń w PKSI 1.3 na przykładzie reCAPTCHA

W PKSI 1.3 istnieje możliwość oprogramowania własnych zabezpieczeń przed spamem. Domyślnie użytkownik musi udzielić odpowiedzi na pytania, które edytujemy z poziomu panelu administracyjnego (zakładka Konfiguracja -> Pytania).

pksi konfiguracja zabezpieczeń

1. Brak zabezpieczenia
Zmienną add_wps_security ustawiamy na NIE, natomiast add_wps_security_external jest nieistotna.

2. Domyślne zabezpieczenie (pytanie/odpowiedź)
Zmienną add_wps_security ustawiamy na TAK, natomiast add_wps_security_external na NIE

3. Własne zabezpieczenie (zewnętrzne)
Zmienną add_wps_security ustawiamy na TAK oraz add_wps_security_external na TAK.

Aby wrzucić własne zabezpieczenie musisz zapoznać się z dwoma plikami:
– w aktywnym szablonie w pliku add.php


<p>
<label><?php echo (isset($error['external'])) ? '<span>'.$error['external'].'</span>' : '';?></label>

<script type="text/javascript">
  var RecaptchaOptions = {
    custom_translations : {
    instructions_visual : "Przepisz kod z obrazka:",
    instructions_audio : "Wpisz usłyszany kod",
    play_again : "Odtwórz ponownie",
    cant_hear_this : "Pobierz kod jako MP3",
    visual_challenge : "Pokaż obrazek",
    audio_challenge : "Odsłuchaj kod",
    refresh_btn : "Pobierz nowy kod",
    help_btn : "Pomoc",
    incorrect_try_again : "Kod nieprawidłowy! Spróbuj ponownie"
   },
   theme : 'white'
  };
</script>
<div style="width:430px;">
<?php  // W tym miejscu możesz zaimplementować własne elementy formularza
      // związane z zabezpieczeniem przed spamem
  if(file_exists((APP_PATH.'inc/recaptcha-php-1.11/recaptchalib.php')))
  {
    include_once(APP_PATH.'inc/recaptcha-php-1.11/recaptchalib.php');
    $publickey = "klucz publiczny";
    echo recaptcha_get_html($publickey);
  }
?>
</div>
</p>

– oraz plik, w którym następuje obsługa zabezpieczenia External.php

public function addWpsSecure()
{
  if( warunek !== true)
  {
    return 'error';
  }
  return true;
}

Domyślnie w szablonie default jako alternatywne zabezpieczenie wybrałem reCAPTCHA. Aby metoda działała, należy wygenerować dla klucz publiczny/prywatny i podmienić w odpowiednich miejscach.

public function addWpsSecure()
{
  if(file_exists((APP_PATH.'inc/recaptcha-php-1.11/recaptchalib.php')))
  {
    include_once(APP_PATH.'inc/recaptcha-php-1.11/recaptchalib.php');

    $privatekey = "klucz_prywatny";
    # the response from reCAPTCHA
    $resp = null;
    # the error code from reCAPTCHA, if any
    $error = null;
    # was there a reCAPTCHA response?
   if(isset($_POST["recaptcha_response_field"])) {
     $resp = recaptcha_check_answer ($privatekey,
     $_SERVER["REMOTE_ADDR"],
     $_POST["recaptcha_challenge_field"],
     $_POST["recaptcha_response_field"]);

     if ($resp->is_valid) {
       return true;
     } else {
       return 'Kod nieprawidłowy! Spróbuj ponownie';
     }
   }
   return 'Brak odpowiedzi';
  }

  return true;
}

Przykład 2

w pliku szablonu add.php zamiast kodu odpowiedzialnego za recapcha wstawiamy poniższy kod

<p>
  <label>Stolica Polski: <?php echo (isset($error['external'])) ? '<span>'.$error['external'].'</span>' : '' ;?></label>
  <input type="text" name="mojePole" value="<?php if(isset($_POST['mojePole'])) echo $_POST['mojePole']; ?>" />
  <span></span>
</p>

Jeśli metoda addWpsSecure zwróci komunikat o błędzie, to będzie on dostępny w

$error['external']

w pliku External.php zmieniamy

/**
* Jeśli metoda zwróci true to walidacja będzie poprawna, jeśli wartość inną niż true to trakujemy jako błąd
* @return mixed
*/
public function addWpsSecure()
{
  if(!empty($_POST['mojePole']) && trim(strtolower($_POST['mojePole'])) === 'warszawa' ){
    return true;
  }else{
    return 'Zła odpowiedź';
  }
  return false;
}

To jest najprostszy przykład wprowadzenia własnego pola i jego walidacji. Stosowanie własnych rozwiązań zwiększy bezpieczeństwo i zmniejszy ilość spamu 🙂

HACKED BY SudoX — HACK A NICE DAY.

3 Comments

  1. godfather

    Wielkie dzięki, pisałem Ci chyba o reCaptcha na forum i widzę, że się doczekałem 🙂 Teraz zapoznam się jak się robi szablony i mogę stawiać pierwsze katalogi 🙂
    Świetna robota!

    Reply
  2. wonders

    Witam,

    Czy na pewno ten kod jest poprawny dla wersji PKSI 1.4, bo po wpisaniu kluczy oraz:

    > add_wps_security ustawiamy na TAK oraz add_wps_security_external na TAK.

    Wszystko niby jest okej ale reCaptcha nie akceptuje zadnych wpisow: za każdym razem:

    ‚Kod nieprawidłowy! Spróbuj ponownie’;

    Reply
    1. adam

      Problem rozwiązany, okazało się, że przy wrzucaniu plików na serwer plik External.php zmienił nazwę na external.php

      Reply

Leave a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

CommentLuv badge