2011-12-07 21 views
6

Tôi đang tìm các bài viết về cách lọc spam. Khi tôi tìm kiếm xung quanh tất cả những gì tôi tiếp tục tìm kiếm là Wordpress, các cách để lọc các từ chửi thề, vv .. đó không phải là những gì tôi đang tìm kiếm. Tôi đang tìm cách để viết hệ thống lọc của riêng bạn và thực hành tốt nhất.Lọc spam nhận xét? PHP

Bất kỳ liên kết hướng dẫn nào từ bất kỳ ai đã thực hiện việc này trước đây đều sẽ được đánh giá cao.

Chỉ bài viết tốt tôi có thể cho đến nay là http://snook.ca/archives/other/effective_blog_comment_spam_blocker

Trả lời

11

Khi viết phương pháp của riêng bạn, bạn sẽ phải sử dụng kết hợp các chẩn đoán.

Ví dụ: nhận xét spam rất phổ biến để có 2 hoặc nhiều liên kết URL.

Tôi muốn bắt đầu viết bộ lọc của bạn như vậy, sử dụng một cuốn từ điển các từ kích hoạt và có nó lặp qua và sử dụng những khả năng để xác định:

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; 
} 

Lưu ý rằng phương pháp này sẽ cho kết quả dương tính giả nhiều, tùy thuộc vào tập hợp từ của bạn; bạn có thể có "cờ" trang web của bạn để kiểm duyệt (nhưng phát trực tiếp ngay) những người có xác suất> .3 và < .6, yêu cầu những người> .6 và < .9 nhập hàng đợi kiểm duyệt (nơi họ không xuất hiện cho đến khi được phê duyệt), và sau đó bất cứ điều gì trên> 1 chỉ đơn giản là bị từ chối.

Rõ ràng đây là tất cả các giá trị bạn sẽ phải tinh chỉnh các ngưỡng nhưng điều này sẽ khiến bạn bắt đầu với một hệ thống khá cơ bản. Bạn có thể thêm vào nó vài vòng loại khác để tăng/giảm khả năng spam, chẳng hạn như kiểm tra tỷ lệ từ xấu đến lời nói, việc thay đổi trọng lượng của lời nói vv

+1

đợi một lúc ... bạn không thể làm mỗi lần một cây bút chì ($ text) cho mỗi từ. – dynamic

+1

Tại sao không? Bằng cách này, nó bắt các biến thể về trường hợp. Chúng tôi không xuất ra chuỗi chữ thường mới, chúng tôi chỉ so sánh nó và loại bỏ nó. – Tim

+0

Trừ khi bạn có nghĩa là hiệu quả là xấu, mà có, nó là, đây chỉ là một ví dụ khái niệm. – Tim

1

Bạn đang tìm kiếm một cách để ngăn chặn thư rác khỏi chương trình thư và như vậy? Nếu vậy, bạn luôn có thể thêm CAPTCHA: http://en.wikipedia.org/wiki/CAPTCHA Nên dễ dàng đưa vào bất kỳ dự án nào nếu đây là những gì bạn đang cố gắng thực hiện. Nếu không, tôi không chắc chắn những gì bạn đang nói về lọc spam.

+0

Vâng một captcha là một cách nhưng nó sẽ không dừng lại những người tự viết ý kiến ​​thư rác. Thực sự, tôi đang tìm một hàm hoặc hàm có thể nhận xét và tạo ra xác suất spam. –

+0

Không có vẻ giống như một cái gì đó mà bạn có thể dễ dàng làm. Dự đoán spam do con người tạo ra cũng giống như đăng một nhận xét. Nếu họ đang dành thời gian để thư rác bạn bằng tay thì họ sẽ tìm cách để thư rác bạn anyway. Các khối duy nhất để một cái gì đó như thế này có thể là một số IP chặn nếu bạn nhận thấy thư rác đến từ một số địa chỉ IP. – Hudspeth

+0

Trong câu hỏi của tôi, tôi đăng một cách mà điều này có thể đạt được, nhưng tôi đã tìm kiếm các hệ thống/phương pháp khác nhau. Chặn IP không hiệu quả như những kẻ gửi spam bình luận 'hardcore', sẽ sử dụng proxy để yêu cầu trả lại, do đó chặn địa chỉ IP sẽ, về lâu dài, mất khách truy cập của bạn. –

2

Tôi ngạc nhiên không ai đề cập đến Akismet. Tôi chưa bao giờ có thư bị đánh dấu sai (có thể là spam hoặc hợp pháp). Cài đặt WordPress của tôi đi kèm với nó. Tất cả những gì tôi phải làm là nhấn cho phép.

0

Tôi đoán bài viết này The war with spam comment có thể cung cấp cho bạn một số gợi ý. Tất nhiên ngày nay một số bot đủ thông minh, vì vậy bạn có thể cần phải thêm CAPTCHA.

0

Tôi hy vọng kịch bản này giúp bạn phát hiện & bảo vệ thư rác

<?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