Ja vs. Forum-Spam - 0:1

Obsah internetu by sa dal charakterizovať ako adult content, spam a všetko ostatné, zoradené podľa množstva obsahu. Dáta ktorými by som to podložil nemám, takže len môj pocit.

Čo je SPAM

To čo pri hľadaní na internete hľadáme, väčšinou nezodpovedá tomu, čo na prvý pokus nájdeme. SPAM je to, čo nechceme vidieť, podstrčený obsah, ktorý nás nezaujíma na ceste za obsahom, ktorý hľadáme. Nevyžiadaný obsah. Obťažuje nás z každej strany a kvôli tomu, že často nie je jednoducho a automaticky odfiltrovateľný, nás pripravuje o čas (a občas aj o peniaze).

Problematika nevyžiadaného obsahu je známa predovšetkým z elektronickej pošty, ale zasahuje asi do všetkých druhov interakcií na internete.

Špeciálnou kategóriou spamu je potom tzv. link-spam, teda zneužívanie privilégia pridávania užívateľského obsahu (najčastejšie komentáre na blogoch a fórach) za účelom získavanie spätných odkazov. V dnešnej dobe sa však často stretnete aj s komentármi, ktoré obsahujú "zvláštne" kľúčové slová bez odkazov. Google totiž vie takéto zmienky tiež zohľadniť.

Pokiaľ teda prevádzkujete blog alebo fórum, máte problém.

Ako som už spomenul, oddeliť zrno od pliev v tomto prípade nie je jednoduché a tak ako nechcete byť falošne negatívny a zbytočne mazať potenciálne nezávadný obsah, tak rovnako nie je cieľom zobrazovať na stránkach odkazy na rôzne kasína, online zoznamky, adult, tabletky a pod.

Aktuálne riešim tento problém v rámci seo fóra, kde je v tejto tématike hodnota odkazov vysoká a postupom času rastie množstvo nevyžiadaných vlákien a odpovedí v nich. Dlhú dobu som filtroval optimisticky, len to, čo odpadlo po splnení sady pravidiel a zvyšok som mazal manuálne, po prečítaní (väčšinou stačili prvé tri slová, maximálne prvá veta).
Dnes to však už nestačí a denne je potrebné zmazať občas naozaj veľké množstvo takýchto príspevkov.
Na jednej strane mám z toho radosť, pretože množstvo spamu zodpovedá rastúcej popularite fóra. Na strane druhej to občas nie je udržateľné a užívateľom sa tento obťažujúci obsah zobrazuje aj niekoľko hodín, v extremných prípadoch aj dní.

Preto som bol nútený zamyslieť sa nad potenciálnym riešením a keďže sa mi osvedčilo premýšľať nad problémom písaním, tak dnes premýšľam nahlas, čo by mohlo v tomto prípade zabrať.

Plán je pridať honeypot, ktorý aktuálne vo formulári nemám. Jeden honeypot by si zaslúžil registračný formulár a jeden následne formulár pre vytvorenie nového postu.

Okrem toho som uvažoval nad nasadením Google Recaptcha V3, s ktorou však zatiaľ reálnu skúsenosť nemám a musím sa priznať, že s Google nerád zdieľam dáta. Aj kvôli tomu som (skoro) prestal používať Google služby.

UPDATE: 7.12. 2022 šiel von update. Nakoniec honeypot na registračný formulár a modulárna trieda Spam, ktorá slúži na detekciu spamu v zadanom reťazci na základe vybraných inšpekcií. Zatiaľ som implementoval jedinú inšpekciu - odkazy. Je povolené odkazovať interne (iné vlákna a SEO knowledge base), nie je však možné odkazovať smerom von. Mám tam interný allow list, ktorý obsahuje weby kam je možné linkovať, ale zatiaľ ich tam veľa nie je :).

class Spam
{
    protected $inspections = [
        LinkInspection::class
    ];

    public function detect(string $content, User $user = null) 
    {
        foreach ($this->inspections as $inspection) {
            resolve($inspection)->setUser($user)->inspect($content);
        }

        return false;
    }
}

Ak chce užívateľ v rámci svojho postu zdieľať odkaz na web, musí tak urobiť mŕtvym linkom, pomocou značky code.

V pláne sú aj ďalšie inšpekcie. Napríklad detekcia rozloženia príspevkov v čase, detekcia spamermi často používaných kľúčových slov, alebo už spomínaná recaptcha V3.

Po necelých 24 hodinách od deploymentu to však už teraz vyzerá na výrazné odľahčenie.

UPDATE 9.12.2022

Stále mažem nevyžiadaný, reklamný obsah, ktorý už síce neobsahuje odkazy, ale otravuje užívateľov. Prvých pár hodín to vyzeralo aj na spomalenie nových registrácií, ale dnes sú už čísla podobné ako pred updatom.