Sblam!

Zabezpiecza formularze przed spamem

Instalacja — PHP

Pobierz skrypt.

To jest ogólna instrukcja umożliwiająca instalację Sblam! na dowolnej stronie, ale wymagająca podstawowej znajomości języka PHP.

Proszę przeczytaj tę instrukcję uważnie i w całości. Bardzo wiele osób przegapia ważne uwagi w niej zawarte i nie­po­trzebnie obniża jakość filtrowania.

1. Zmodyfikowanie PHP

Dodanie filtrowania wymaga dodania kodu do skryptu PHP, który odbiera dane z formu­larza (zazwyczaj to plik wskazy­wany przez <form action="…">).

W skrypcie tym musisz dodać kod tak, aby był wykonany po sprawdzeniu poprawności danych (żeby niewypełniony formularz nie był niepotrzebnie sprawdzany pod kątem spamu), ale przed zapisaniem postu do bazy.

Kod do dodania:

include_once "sblamtest.php";
$rezultat = sblamtestpost();

if ($rezultat > 0) {
    die('<h1>Przepraszamy - twój komentarz został uznany za spam!</h1>
    <p><a href="'.sblamreporturl().'">Zgłoś błąd filtru</a>.</p>');
}

Umieść pliki Sblam! w tym samym katalogu, co skrypt.

Powyższy kod, jeśli potrafisz, możesz dowolnie modyfikować i rozszerzać (w szczególności warto w nim ulepszyć reakcję na spam).

Funkcja sblamtestpost() zwraca liczbę oznaczającą jak bardzo spamowaty jest post:

  • 2 oznacza pewny spam, który możesz spokojnie odrzucić.
  • 1 oznacza prawdopodobny spam (ale dla pewności możesz go dodać do moderacji).
  • -1 to prawdopodobny czysty post (ale — j.w.)
  • -2 post jest czysty jak łza, możesz go śmiało zachować.
  • 0 oznacza błąd. Post nie został sprawdzony.

Funkcja sblamreporturl() zwraca adres (URL), pod którym użytkownik może zgłośić błędnie zaklasyfikowany post.

Nie próbuj wysyłać testowych spamów! Nie uda ci się w ten sposób sprawdzić, czy działa filtrowanie! Koniecznie przeczytaj testowanie na końcu tej strony zanim zaczniesz bezskutecznie zalewać serwis postami typu „via­gra, via­gra, via­gra”!

2. Dodanie JavaScript

Drugim krokiem jest umieszczenie specjalnego skryptu JavaScript na stronie (filtr działa bez Java­Script, ale z mniej­szą skutecznością). Miejsce umieszczenia jest ważne — skrypt musi być dodany za końcowym tagiem </form> formularza, który będzie filtrowany:

<form action="…" method="post">
 …
</form>
<script src="sblam.js.php"></script>

Popraw ścieżkę z przykładu tak, aby wskazywała na plik sblam.js.php na twoim serwerze.

Skrypt nie zadziała jeśli masz bardzo nieprawidłowy HTML. W szczególności poplątane i niepozamykane tagi tabel mogą uniemożliwić działanie skryptu.

3. Utworzenie swojego konta (klucza API)

Sblam! pozwala założyć konta, dzięki którym można sprawdzić poprawonść instalacji i przeglądać złapane spamy. Zakładanie konta zostało opisane na osobnej stronie.

4. Testowanie filtru

Nie próbuj wysyłać testowych spamów! Jeśli sam/a spróbujesz spreparować spam, to są tylko dwie możliwości:

  • Filtr nie da się nabrać, bo sprawdza dużo więcej, niż tylko słowa i nie zobaczysz jak działa blokowanie.
  • Uda ci się przekonać filtr, że jesteś spamerem i zostaniesz potraktowany/a jak spamer ze wszystkimi tego konsekwencjami.

Żeby bezpiecznie i pewnie sprawdzić jak działa blokowanie, wyślij post o treści „to jest test spamu” (tylko ten tekst i nic więcej). Ta specjalna wiadomość powoduje, że Sblam! oznacza post jako spam, ale nie uznaje jego autora za spamera.

Jeśli wpisanie „to jest test spamu” nie powoduje zaklasyfikowania postu jako spam, to najpraw­do­po­dobniej Sblam! nie potrafił automa­tycznie rozpoznać nazw pól w twoim formularzu i musisz je podać.

Żeby sprawdzić jak posty są przepuszczane, napisz jakiś normalny post (albo skopiuj jakiś poprzedni, który nie jest spamem).

Wyślij post zawierający polskie litery (sczególnie „ś” i „ą”) i po zalogowaniu się do konta sprawdź, czy dotarły do serwera i czy polskie znaki wyświetlają się poprawnie. Jeśli nie, to najprawdopodobniej używasz niestandardowego kodowania znaków Windows 1250, które przez Sblam! nie jest obsługiwane.

Nietypowe nazwy pól?

Jeśli testowe posty są przepuszczane albo po zalogowaniu się do konta widzisz posty z treścią nie tam, gdzie trzeba, to oznacza, że musisz określić jakich nazw pól używa twój formularz. Robi się to podając ich nazwy w tablicy przekazywanej do funkcji sblamtestpost().

Nazwy muszą być podane w odpowiedniej kolejności:

  1. nazwa pola z tekstem postu (skrypt obsługuje maksymalnie jedno pole),
  2. nazwa pola z podpisem/imieniem autora,
  3. nazwa pola z adresem e-mail podanym przez autora,
  4. nazwa pola z adresem strony domowej podanym przez autora.

Jeśli nie przewidujesz danego pola w formularzu, to zamiast jego nazwy podaj NULL.

<input type=text name="ksyfka">
$rezultat = sblamtestpost(array('tekscik', 'ksyfka', 'emil', 'linkdowuwuwu'));

Ważne: podaj tylko nazwy pól, a nie ich zawartość (skrypt sam sobie weźmie zawartość z $_POST).

Zwróć też uwagę, że lista pól jest w array(), a nie jako parametry funkcji.

Coś jeszcze?

Dodatkowo zainstaluj czarną listę i wesprzyj projekt.

Jest możliwość generowania specjalnych linków, które automatycznie logują do konta aby pokazać statystyki.

Kontakt z autorem.