2011-12-07 17 views
6

Szukam artykułów na temat sposobów filtrowania spamu. Kiedy przeszukuję wszystko, co znajduję, to Wordpress, sposoby filtrowania przekleństw itp., Które nie są tym, czego szukam. Szukam sposobów na napisanie własnego systemu filtrów i najlepszych praktyk.Filter Comment Spam? PHP

Wszelkie linki do tutoriali od osób, które zrobiły to wcześniej, zostałyby docenione.

Tylko dobry artykuł mogę tak daleko jest http://snook.ca/archives/other/effective_blog_comment_spam_blocker

Odpowiedz

11

Pisząc własną metodę, musisz zastosować kombinację heurystyki.

Na przykład bardzo często komentarze spamowe mają 2 lub więcej linków URL.

Chciałbym rozpocząć pisanie tak jak filtr, korzystając ze słownika wyrazów spustowych i mieć go pętli i używać tych, do określenia prawdopodobieństwa:

function spamProbability($text){ 
    $probability = 0; 
    $text = strtolower($text); // lowercase it to speed up the loop 
    $myDict = array("http","penis","pills","sale","cheapest"); 
    foreach($myDict as $word){ 
     $count = substr_count($text, $word); 
     $probability += .2 * $count; 
    } 
    return $probability; 
} 

Należy zauważyć, że metoda ta spowoduje wiele fałszywych alarmów, w zależności od zestawu słów; możesz mieć swoją "flagę" witryny dla moderacji (ale zaraz pojawi się na żywo) z prawdopodobieństwem> .3 i < .6, czy wymagają tego> .6 i < .9 wprowadź kolejkę do moderacji (gdzie nie pojawiają się dopóki nie zostanie zatwierdzony), a następnie wszystko powyżej> 1 jest po prostu odrzucane.

Oczywiście są to wszystkie wartości, które trzeba będzie zmodyfikować, ale to powinno zacząć od całkiem prostego systemu. Można dodać do niego kilka innych kwalifikatorów na zwiększenie/zmniejszenie prawdopodobieństwa spamu, takich jak sprawdzanie stosunek złych słów do słów, zmiana wagi słów, itp

+1

odczekaj chwilę ... nie możesz zrobić za każdym razem strtolower ($ text) dla każdego słowa. – dynamic

+1

Dlaczego nie? W ten sposób przechwytuje zmiany w przypadku. Nie wypisujemy nowego łańcucha znaków, tylko go porównujemy i pozbywamy się go. – Tim

+0

Jeśli nie masz na myśli, że wydajność jest zła, a tak, to jest to tylko przykład koncepcji. – Tim

1

Szukasz sposobu, aby zatrzymać spam od botów i takie? Jeśli tak, zawsze możesz dodać CAPTCHA: http://en.wikipedia.org/wiki/CAPTCHA Powinien być łatwy do umieszczenia na każdym projekcie, jeśli to jest to, co próbujesz zrobić. W przeciwnym razie nie jestem pewien, co mówisz, jeśli chodzi o filtrowanie spamu.

+0

Dobrze captcha jest jeden sposób, ale to nie powstrzyma ludzi, którzy ręcznie pisać komentarze spamu. Naprawdę, szukam funkcji lub funkcji, które mogłyby skomentować i wytworzyć prawdopodobieństwo spamu. –

+0

Nie wydaje się czymś, co można łatwo zrobić. Prognozowanie stworzonego przez ludzi spamu jest jak opublikowanie komentarza. Jeśli poświęcą trochę czasu na ręczne przesłanie spamu, to i tak znajdą sposób na spame. Jedynym blokiem na coś takiego może być blokowanie adresów IP, jeśli zauważysz, że spam pochodzi z pewnych adresów IP. – Hudspeth

+0

W moim pytaniu zamieściłem sposób, w jaki można to osiągnąć, ale szukałem różnych systemów/metod. Blokowanie adresów IP nie działa jako tzw. "Hardcore" spamerzy komentarzy, użyje serwerów proxy do odrzucania żądań, dlatego blokowanie adresów IP na dłuższą metę spowoduje utratę użytkowników. –

2

Jestem zaskoczony, że nikt nie wspomniał o Akismet. Nigdy nie miałem wiadomości oznaczonej nieprawidłowo (czy to spam, czy legit). Moja instalacja WordPressa przyszła z tym. Jedyne, co musiałem zrobić, to nacisnąć "Włącz".

0

Chyba ten artykuł The war with spam comment może dać pewne wskazówki. Oczywiście w dzisiejszych czasach niektóre boty są wystarczająco inteligentne, więc może być konieczne dodanie CAPTCHA.

0

Mam nadzieję, że to pomoże skryptu wykryć & chronić Spam

<?php 
function isspam($text) 
{ 
$sfil[0] = "link"; 
$sfil[1] = "http"; 
$sfil[2] = "www"; 
$sfil[3] = "any slang"; 
$sfil[4] = "any word"; 
$sfil[5] = "any website"; 
$text = str_replace(" ", "", $text); 
$text = strtolower($text); 
for($i=0;$i<count($sfil);$i++) 
{ 

$nosf = substr_count($text,$sfil[$i]); 
if($nosf>0) 
{ 
return true; 
} 
} 

return false; 
} 
?> 

Create spam filter in PHP Details