Příručka:$wgSpamRegex

This page is a translated version of the page Manual:$wgSpamRegex and the translation is 100% complete.
Přístup: $wgSpamRegex
Vzor regulárního výrazu, který, pokud se s ním obsah stránky shoduje, zabrání ukládání stránky.
Zavedeno od verze:1.2.6
Odstraněno od verze:stále se používá
Povolené hodnoty:(pole řetězců regulárních výrazů)
Výchozí hodnota:[]

Jakýkoli text přidaný na wiki stránku odpovídající tomuto regulárnímu výrazu (nebo "regulárnímu výrazu") bude rozpoznán jako Wiki spam a úpravy budou zablokovány. $wgSpamRegex ovlivní všechny skupiny uživatelů. Dokonce i členové uživatelských skupin sysop a byrokrati nebudou mít povoleno uložit text, pokud odpovídá $wgSpamRegex. Pomocí Rozšíření:AbuseFilter můžete nastavit pravidla, která vám také umožní filtrovat podle skupin! $wgSpamRegex je jednou z nejúčinnějších integrovaných funkcí proti spamu MediaWiki. Nezablokuje veškerý spam, ale může dramaticky snížit spam, téměř bez negativního dopadu na legitimní uživatele. Konfigurační nastavení $wgSpamRegex bude řídit, jak mediawiki zkoumá text příspěvků a určuje, zda jsou příspěvky spamem nebo ne.

Varování Varování: Pokud váš regulární výraz filtru nevyžádané pošty quietly fails (tiše selže), může potřebovat více paměti! Podívejte se na #pcre.backtrack_limit

Velký příklad

Následující příklad je dobré nastavení pro vyzkoušení na vaší wiki, pokud se jedná o středně/malou wiki trpící spamovými útoky. Do souboru LocalSettings.php vložte následující:

 $wgSpamRegex = ["/".                        # "/" je úvodní obálka
                "s-e-x|zoofilia|sexyongpin|grusskarte|geburtstagskarten|".
                "(animal|cam|chat|dog|hardcore|lesbian|live|online|voyeur)sex|sex(cam|chat)|adult(chat|live)|".
                "adult(porn|video|web.)|(hardcore|teen|xxx)porn|".
                "live(girl|nude|video)|camgirl|".
                "spycam|casino-online|online-casino|kontaktlinsen|cheapest-phone|".
                "laser-eye|eye-laser|fuelcellmarket|lasikclinic|cragrats|parishilton|".
                "paris-(hilton|tape)|2large|fuel(ing)?-dispenser|huojia|".
                "jinxinghj|telemati[ck]sone|a-mortgage|diamondabrasives|".
                "reuterbrook|sex-(with|plugin|zone)|lazy-stars|eblja|liuhecai|".
                "buy-viagra|-cialis|-levitra|boy-and-girl-kissing|". # Tato slova odpovídají spamovým slovům
                "dirare\.com|".           # Toto odpovídá názvu domény spammeru dirare.com
                "overflow\s*:\s*auto|".   # To odpovídá overflow:auto (bez ohledu na mezery na obou stranách dvojtečky)
                "height\s*:\s*[0-4]px|".  # To odpovídá height:0px (většina skrytého spamu CSS) (bez ohledu na mezery na obou stranách dvojtečky)
                "==<center>\[|".          # To odpovídá nedávnému spamu souvisejícímu se starsearchtool.com a přáteli
                "\<\s*a\s*href|".         # To zcela zablokuje všechny odkazy href a vynutí syntaxi wiki
                "display\s*:\s*none".     # Toto bojuje proti display:none (bez ohledu na mezery na obou stranách dvojtečky)
                "/i"];                     # "/" ukončí regulární výraz a přepínač "i", který následuje, způsobí, že test nerozlišuje malá a velká písmena
                                          # "\s" odpovídá mezerám
                                          # "*" je opakovač (nula nebo vícekrát)
                                          # "\s*" znamená hledat 0 nebo více mezer

Všimněte si, že předposlední řádek nemá "|" na konci řetězce. Je to proto, že další řádek ukončuje regulární výraz uzavírací obálkou / následovanou přepínačem "i".

Tento příklad zahrnuje běžná klíčová slova pro spam (některá převzata z Meta-Wiki's Spam Blacklist) a také techniky pro blokování CSS skrytého spamu.

Použití regulárních výrazů k blokování spamu

Zde je průvodce regulárními výrazy. Experimentujte s nastavením $wgSpamRegex a vyzkoušejte některé úpravy na stránce SandBox, abyste viděli, co je blokováno. Ale pozor! Dbejte na to, abyste se vyhnuli falešným poplachům, tj. nesprávné shodě legitimních úprav, viz Vyhnout se falešným poplachům níže.

Nastavení, které přiřadíte $wgSpamRegex, je regulární výraz (viz článek na Wikipedii a příručka PHP o regulárních výrazech). Výše uvedený příklad ukazuje regulární výraz, který se vytváří na několika řádcích, pomocí syntaxe PHP tečka ke zřetězení řetězců. Díky tomu je tento dlouhý regulární výraz kompaktnější, ale také o něco složitější.

Pokud vytvoříte své vlastní regulární výrazy, možná je budete chtít otestovat v PCRE Regex Evaluator (klikněte na záložku PCRE na této stránce).

Jednoduchý příklad

Zde je jednodušší příklad:

$wgSpamRegex = ["/buy-viagra/"];

Pamatujte, že myšlenkou je rozhodnout - Je to spam: ano nebo ne? V tomto příkladu bude jakýkoli text příspěvku obsahující 'buy-viagra' odpovídat jako spam. Symboly '/' na začátku a na konci jsou součástí syntaxe regulárního výrazu.

Blokování několik různých slov/domén

Rozšiřme náš příklad, abychom se pokusili porovnat více druhů spamu:

$wgSpamRegex = ["/buy-viagra|adultporn|online-casino|dirare\.com|sexcluborgy\.net/"];

Použití '|' symbol mezi slovy, výše uvedený příklad zablokuje několik různých spamových slov a také některá doménová jména, která jsou propagována spammery.

$wgSpamRegex se použije na veškerý přidaný text, včetně adres URL spamových odkazů. Jako takové může být blokování doménových jmen velmi efektivním způsobem, jak se zbavit konkrétního spammeru.

Vyhněte se falešně pozitivním výsledkům

Vyhnout se falešným pozitivům je zde skutečnou výzvou a nejlépe to ilustruje špatný příklad:

# Nedělejte to!
$wgSpamRegex = ["/cialis/"];

Spousta spammerů ráda mluví o 'cialis' (nějaký druh drogy. Koho to zajímá? ne nás!), a tak byste mohli být v pokušení označit toto slovo za spam, ale tohle také zabrání uživatelům zmiňovat slovo 'specialista.' Je velmi snadné udělat takovou chybu. Buďte opatrní s nastavením regulárního výrazu. Chcete zastavit spammery, aniž byste obtěžovali své uživatele. Tento problém lze v mnoha případech překonat zahrnutím vzoru hranice slova "\b" před a za jakákoli slova, která by mohla být obsažena ve větším slově, např.

# To bude odpovídat "cialis", ale ne "specialista"
$wgSpamRegex = ["/\bcialis\b/"];

# Tuto možnost můžete také zahrnout kolem skupiny vzorů, např.
$wgSpamRegex = ["/\b(cialis|viagra|porn|sex|anal)\b/"];
# Vyhnete se tak zákazu slov jako "analysis" nebo "Essex".

Další tipy pro regulární výrazy

Regulární výrazy jsou velmi silné. $wgSpamRegex shoda se použije na veškerý text stránky nebo sekce, která se upravuje, nejen na adresy URL. To vám dává možnost zablokovat vše, co se vám nelíbí, pokud dokážete vypracovat dobrý regulární výraz, který tomu bude odpovídat (buďte co nejkonkrétnější, abyste se vyhnuli falešným poplachům). V následující sekci CSS Hidden Spam využíváme tento nástroj.

Zpráva o spamu

Normálně, když nastavení $wgSpamRegex odpovídá nějakému spamu, zobrazí se následující zpráva:

Stránka, kterou jste chtěli uložit, byla zablokována spamovým filtrem. To je pravděpodobně způsobeno odkazem na externí web na černé listině (blacklist).
Následující text spustil náš spamový filtr:

[slovo/název domény, které bylo zablokováno]

Tento text lze změnit a nachází se na dvou upravitelných wiki stránkách ve jmenném prostoru MediaWiki. Klikněte na 'Speciální stránky' -> 'Data a nástroje Wiki: Systémové zprávy', zadejte 'spampro' do pole 'Filtrovat podle prefixu:' a klikněte 'Jít'. Pokud se na horní kartě zobrazí 'Zobrazit zdroj' místo 'Upravit', nemáte oprávnění k úpravám. Musíte se přihlásit jako uživatel sysop (nebo uživatel WikiSysop, kterého jste nakonfigurovali během instalace).

'$1' v MediaWiki:Spamprotectionmatch zobrazuje shodu regulárního výrazu neúspěšné úpravy, která aktivovala spamový filtr. Pokud chcete '$1' skrýt, smažte.

Zobrazení/skrytí shodného textu

Pokud jste vytvořili regulární výraz, který je příliš omezující, nebo jste udělali jinou chybu v nastavení, můžete získat falešně pozitivní výsledky. Ve skutečnosti celý příklad výše může za určitých výjimečných okolností odpovídat legitimnímu textu (možná, že vaši uživatelé skutečně chtějí mluvit o nákupu Viagry).

Zobrazením textu, který se shodoval, pomáhá zpráva MediaWiki:Spamprotectionmatch snížit problémy způsobené falešnými poplachy.

Umožňuje vašim uživatelům přesně vám hlásit problémy týkající se vašeho nastavení $wgSpamRegex.

Umožňuje jim to také vymyslet řešení, aby mohli pokračovat v úpravách wiki.

Bohužel je to také velmi užitečná informace pro spammery navštěvující vaše stránky. Někteří spameři jsou automatizovaní roboti, takže tyto informace stejně neuvidí, nicméně mnoho spammerů (věřte nebo ne) jsou lidé. Tito lidé mohou mít potíže s tím, že se podívají na odpovídající informace a pokusí se vymyslet náhradní řešení (např. jen vynechání názvu domény, kterou jste zablokovali, ale propojení s různými jinými doménami). Je těžké vědět, jak moc je tento druh chování rozšířen, ale pokud jste jim chtěli ztížit život. Informace odpovídající spamu můžete skrýt jednoduchým nastavením zprávy MediaWiki:Spamprotectionmatch jako prázdné. Měli byste to udělat pouze v případě, že jste si dobře vědomi výše uvedených bodů o falešných pozitivech a pečlivě jste svůj regulární výraz navrhli, abyste se jim vyhnuli.

CSS skrytý spam

MediaWiki je docela tolerantní, pokud jde o HTML tagy a definice stylů CSS (viz Nápověda:HTML ve wikitextu na Meta-Wiki)

To dalo spammerům příležitost vymyslet záludný trik, jak skrýt jejich spam před zraky. Nezobrazuje se na vašich stránkách, ale zobrazuje se ve vašich editačních polích a změny se zobrazují na obrazovce 'recent changes' (poslední změny). Jako takový způsobí zmatek vašim legitimním uživatelům, a to ještě předtím, než zvážíte účinky pomoci spammerovi hostováním jejich odkazů. Obecně je 'CSS skrytý spam' špatný. To, že to (snadno) nevidíte, neznamená, že to můžete ignorovat.

Problém byl identifikován lidmi na chongqed.org v roce 2005, ale v roce 2006 se mnohem zhoršil, a to do bodu, kdy se zdá, že většina spammerů MediaWiki tento trik používá.

Můžeme použít regulární výraz, abychom zabránili CSS trikům, které používají. Dva z nich jsou zahrnuty v úplném příkladu výše (v kombinaci pomocí symbolu '|'):

Chcete-li zabránit skrytému spamu CSS formuláře <div style="overflow:auto; height:0px;":

$wgSpamRegex = ["/".
  "overflow\s*:\s*auto|".
  "height\s*:\s*[0-4]px|".
  "/i"];

Chcete-li zabránit skrytému spamu CSS formuláře style="display:none;":

$wgSpamRegex = ["/style\s*=\s*"\s*display\s*:\s*none\s*"/i"];
     # Which parses as follows:
     # "       = PHP string wrapper
     # /       = RegEx opening wrapper

     # style   = search for the string 'style'
     # \s*=\s* = search for an equals sign with any amount of whitespace (including no whitespace) on either end
     # display = search for the string 'display'
     # \s*:\s* = search for a colon sign with any amount of whitespace (including no whitespace) on either end
     # none\s* = search for the string 'none' followed by any amount of whitespace (including no whitespace)

     # /       = RegEx closing wrapper
     # i       = RegEx switch makes tests case-insensitive
     # "       = PHP string wrapper
     # ;       = PHP line end

Pro trochu přísnější nastavení můžete dát přednost úplnému zakázání různých atributů značky stylu:

$wgSpamRegex = ["/\<.*style.*(display|position|overflow|visibility|height)\s*:.*>/i"];

...ale možná zjistíte, že to začíná omezovat vaše uživatele více, než byste chtěli.

Blokovat VŠECHNY externí odkazy

Všechny externí odkazy můžete zablokovat pomocí tohoto regulárního výrazu:

# Blokovat VŠECHNY externí odkazy
$wgSpamRegex = ["/https?:\/\//"];
$wgSummarySpamRegex = "/https?:\/\//";

To je extrémně omezující pro legitimní uživatele wiki, protože již nemohou odkazovat na žádnou externí stránku. Je to špatné řešení problému se spamem, i když je o něco lepší než úplné uzamčení.

Pokud to budete používat, ujistěte se, že vaše stránka 'MediaWiki:Spamprotectiontext' obsahuje vysvětlení toho, co jste udělali.

Omezte externí odkazy na 100

Tímto můžete omezit celkový počet externích odkazů na stránku, například 100

# Omezte celkový počet externích odkazů povolených na stránku (znak ? v *? činí * nenasytným a je důležitý pro efektivitu)
$wgSpamRegex = ["/(http:(.|\n)*?){101}/"];

Pokud to uděláte, ujistěte se, že vaše stránka 'MediaWiki:Spamprotectiontext' obsahuje vysvětlení toho, co jste udělali.

pcre.backtrack_limit

Varování Varování: Pokud váš regulární výraz filtru spamu potichu selže (quietly fails), může potřebovat více paměti! Nebo možná budete muset napsat svůj regulární výraz lépe, aby se sám neplýtval: Přidáním ? k tomu, jako je to *?, může výrazně pomoci účinnosti! Otestujte své doma vytvořené regulární výrazy v PCRE Regex Evaluator (klikněte na kartu PCRE).

PHP od verze 5.3.7 má pcre.backtrack_limit, který je ve výchozím nastavení 1000000 (1M). To však může být stále příliš nízké. Zkuste do souboru "LocalSettings.php" přidat následující řádek:

// Regulární výrazy kompatibilní s Perlem ustupují limit paměti
ini_set( 'pcre.backtrack_limit', '2M' );

Pokud to stále nestačí, můžete tento limit postupně zvyšovat, dokud nebude vyhovovat vašim aktuálním požadavkům wiki.

Související odkazy