Z uwagi na dużą liczbę wpisów stworzonych bez wątpienia wyłącznie w celu pozycjonowania stron na określone frazy, dodaliśmy do wszystkich linków (w postach i podpisach) atrybut rel="nofollow". Z tego względu wszystkie dodane linki straciły swoją moc pozycjonerską. Forum jest dla Was, dlatego prosimy o zamieszczanie wyłącznie "prawdziwych" tematów i odpowiedzi.

Blokowanie spamu w formularzu

asp.NET, PHP oraz bazy danych
  • Wiadomości
Offline

sylrom

  • Posty: 110
  • Rejestracja: 10 lut 2014, o 15:26

Blokowanie spamu w formularzu

Post9 cze 2016, o 21:41

Witam.

Mam na stronie formularz kontaktowy i od jakiegoś czasu dostaje strasznie dużo spamu który rozsyłany jest przy pomocy tego formularza. Czy można to jakoś zablokować. Zrobiłem już pola typu 2+2 wpisz wynik, sprawdzanie tokenu ale to nic nie daje. Znacie jakieś sprawdzone sposoby na zablokowanie takiej wysyłki spamu przy pomocy mojego formularza kontaktowego?

Pozdrawiam - Sylwek
Offline
Awatar użytkownika

Piotr Palarz

Ekspert

Ekspert

  • Posty: 683
  • Rejestracja: 24 kwie 2012, o 00:37

Re: Blokowanie spamu w formularzu

Post11 cze 2016, o 17:45

Ja robię tak, że dla formularza w atrybucie action wpisuję zakodowany w base64 adres, czyli np. dla "/form.php" będzie to "L2Zvcm0ucGhw", a potem w JavaScript na kliknięcie przycisku "Wyślij" przypisuję funkcję, która odkodowuje ten ciąg na "/form.php" i wysyła dane do serwera.

W ten sposób boty, które trafią na naszą stronę nie wyślą do serwera danych, bo nie znają adresu skryptu PHP.

W JavaScript w przeglądarce możesz zakodować dany ciąg na base64 za pomocą funkcji window.btoa("string") a rozkodować za pomocą window.atob("zakodowany_string")

Najprościej ujmując:
Kod: Zaznacz cały
<form action="L2Zvcm0ucGhw" id="form">
    <input type="text" name="name">
    <input type="submit" value="Wyślij" id="send">
</form>
oraz JS:
Kod: Zaznacz cały
var form = document.querySelector("#form"),
    button = document.querySelector("#send");

send.addEventListener("click", function() {
    form.setAttribute("action", window.atob(form.getAttribute("action")));
}, false);
To powinno wystarczyć, ale zazwyczaj dodaję sobie jeszcze jeden środek ostrożności, tzn. po rozkodowaniu atrybutu action dodaję jeszcze dynamicznie ukryte pole input np. <input type="hidden" name="trusted" value="1">, a po stronie serwera sprawdzam, że w $_POST['trusted'] mam wartość 1. Jeżeli nie, to ustawiam kod np. na 401 Unauthorized.

A jeśli wysyłam formularz AJAXem z użyciem jQuery, to na serwerze dodatkowo sprawdzam, czy żądanie było właśnie AJAXowe. To dodatkowo wykluczyłoby przeciętnego bota.
Obrazek
Offline

Diana

  • Posty: 8
  • Rejestracja: 24 lis 2016, o 14:54

Re: Blokowanie spamu w formularzu

Post24 lis 2016, o 17:24

W skrypcie PHP sprawdzam czy sa słowa http www url i nie puszczam. Prosty sposób by bez denerwujący tokenów pozbyć się 95 % spamu.

Wróć do Server side

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość

cron