Hàm phát hiện nội dung spam nâng cao trong PHP

Không vòng vo nữa. Đây là một hàm duy nhất, gom tất cả kinh nghiệm spam phổ thông vào một chỗ: link bẩn, keyword lặp, ký tự dị, viết hoa la hét, độ dài bất thường. Không AI, không dịch vụ ngoài, nhưng đủ mạnh để đập chết phần lớn spam thực tế đang phá form và comment của bạn.

Hàm phát hiện nội dung spam nâng cao trong PHP

Tư duy của hàm spam nâng cao

  • Không quyết định spam theo một dấu hiệu duy nhất
  • Chấm điểm hành vi spam
  • Vượt ngưỡng là loại
  • Dễ chỉnh ngưỡng, dễ mở rộng

Hàm phát hiện spam nâng cao

<?php
function is_spam_ultimate(string $content, int $threshold = 7): bool {
    $score = 0;
    $text = trim($content);

    if ($text === '') {
        return true;
    }

    $lower = mb_strtolower($text);

    // 1. độ dài bất thường
    $length = mb_strlen($lower);
    if ($length < 8) { $score += 3; } elseif ($length > 2000) {
        $score += 2;
    }

    // 2. quá nhiều link
    preg_match_all('/https?:\/\//i', $lower, $links);
    if (count($links[0]) >= 2) {
        $score += 3;
    }

    // 3. lặp từ khoá bất thường
    $words = preg_split('/\s+/u', $lower, -1, PREG_SPLIT_NO_EMPTY);
    if (count($words) > 0) {
        $counts = array_count_values($words);
        foreach ($counts as $count) {
            if ($count >= 5) {
                $score += 3;
                break;
            }
        }
    }

    // 4. ký tự dị hoặc trộn chữ số vô nghĩa
    if (preg_match('/[a-z]{3,}\d{3,}|[^\p{L}\p{N}\s]{4,}/u', $lower)) {
        $score += 2;
    }

    // 5. viết hoa quá nhiều (la hét)
    preg_match_all('/[A-Z]/', $text, $caps);
    if (count($caps[0]) > 20) {
        $score += 2;
    }

    // 6. nhiều dòng giống nhau
    $lines = array_filter(array_map('trim', explode("\n", $lower)));
    if (count($lines) !== count(array_unique($lines))) {
        $score += 2;
    }

    // 7. mật độ link so với chữ
    if ($length > 0 && count($links[0]) / $length > 0.02) {
        $score += 2;
    }

    return $score >= $threshold;
}

Cách dùng duy nhất nên dùng

<?php
$content = $_POST['content'] ?? '';

if (is_spam_ultimate($content)) {
    die('Nội dung bị đánh dấu là spam');
}

Vì sao hàm này mạnh nhưng không ngu

  • Không phụ thuộc keyword cố định
  • Không cần database
  • Không cần regex dị hợm
  • Chặn spam theo hành vi, không theo chữ

Nên chỉnh threshold khi nào

  • Form liên hệ: 6–7
  • Comment blog: 7–8
  • Đăng bài công khai: 8–9

Kết luận

Một hàm spam tốt không phải là hàm bắt được 100% spam, mà là hàm giữ cho hệ thống sạch mà không giết nhầm người dùng thật. Hàm này sinh ra để làm đúng điều đó: gọn, mạnh, và dùng được ngay.

Spam thì tiến hoá từng ngày, nhưng backend mà tỉnh là spam không có cửa!

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...