Ein Blick ins Innere von Reddits Anti-Spam-System
(lyra.horse)- Durch einen vorübergehenden Fehler auf Reddit im Jahr 2021 wurden in Relay for reddit löschungsgründe des siteweiten Spam-Filters und interne Bewertungsdaten sichtbar, die normalerweise als
Removed: Autoverborgen waren - Laut dem öffentlichen Archivcode werden Löschinformationen über
ban_info.bannerweitergegeben; Relay zeigtebanned_by=trueaus der API als Auto an, doch offenbar trat das Problem auf, als dasselbe Feld interne Gründe enthielt - Zu den offengelegten Gründen gehörten
domain,spammit,banned user,shadowban, spamurai und weitere; bei spamurai waren sogar Kontenalter, Karma, Anzahl der Meldungen, ISP, E-Mail-Domain, User-Agent, Sprach-Header, TLS-Fingerprint, Referrer und bis hin zum Perspective-API-Score enthalten - Der SPAM-Score der Google-Perspective API stimmte fast exakt mit den Reddit-Löschlog-Werten überein; zudem zeigte sich, dass sich die Werte durch das Hinzufügen kurzer Zeichenfolgen, den Austausch durch kyrillische Zeichen sowie durch Ignorieren von Groß-/Kleinschreibung und Zahlen stark verändern konnten
- Reddits Anti-Spam-System wirkt wie ein mehrgenerationelles Gemisch aus Python-2.7-basierten Prüfungen, regelbasiertem Lua in REV1/REV2, Snooron sowie OCR- und Bildklassifizierungs-Tools; 2026 wird das Offenlegungsrisiko als geringer eingeschätzt, weil die Perspective API eingestellt wird und LLM-basierter Spam die Lage verändert hat
2021 sichtbar gewordene Löschgründe
- Ein Nutzer, der Moderator auf Reddit war, erhielt 2021 in der App Relay for reddit Benachrichtigungen über entfernten Spam und sah dabei interne Anti-Spam-Nachrichten, die normalerweise nicht sichtbar sein sollten
- In der normalen Moderatoransicht werden automatische Spam-Entfernungen als
Removed: Autoangezeigt, doch damals erschienen die tatsächlichen Löschgründe und internen Daten in rotem Text - Etwa eine Stunde später war das Verhalten wieder normal, und übrig blieben nur die damals aufgenommenen Screenshots
Reddit-Moderation und die Anzeige Auto
- In den Reddit-Untergemeinschaften, den Subreddits, übernehmen Community-Moderatoren das Entfernen von Beiträgen, das Sperren von Nutzern, die Verwaltung von Modmail und mehr
- Moderatoren können sehen, von wem ein Beitrag oder Kommentar entfernt wurde
- Eine normale Moderator-Entfernung wird mit dem Namen des Moderators angezeigt
- Eine Entfernung durch AutoModerator wird als
AutoModeratorangezeigt - Entfernungen durch den siteweiten Spam-Filter oder durch Reddit-Administratoren können als
Autoerscheinen
- Im Moderationslog erscheinen siteweite Entfernungen als
redditoderAnti-Evil Operations
Der Offenlegungspfad laut öffentlichem Archivcode
- Reddit veröffentlichte bis 2017 seinen Quellcode, und anhand dieses Archivcodes lässt sich ein Teil des Ablaufs bei Entfernungen nachvollziehen
- Die Moderator-Entfernungsfunktion
POST_removeruftadmintools.spamaufmoderator_bannedunterscheidet, ob die Entfernung durch einen Moderator oder einen Administrator erfolgtebannerspeichert den Benutzernamen des Kontos, das die Entfernung durchgeführt hat
get_mod_attributesexportiertban_infoentfernter Elemente in die API-Antwort- Wenn ein Moderator etwas entfernt hat, wird der Wert von
banneralsbanned_byzurückgegeben - Wenn ein Administrator etwas entfernt hat, wird statt des echten Namens
Truezurückgegeben
- Wenn ein Moderator etwas entfernt hat, wird der Wert von
- Relay for reddit ersetzt laut dekompiliertem Code
bannedBy, wenn es"true"ist, durch die ZeichenfolgeAuto - In Reddit gab es beim Einreichen von Links auch einen Codepfad, der bei erkannten verbotenen Domains interne Gründe wie
banner = "domain (REASON)"in das Feldbannerschrieb - Das
banner-Feld mit internem Löschgrund sollte eigentlich nur für siteweite Administratoren sichtbar sein, wurde aber vermutlich durch einen Fehler in einem ähnlichen Codepfad Moderatoren offengelegt
Kategorien der offengelegten Löschgründe
-
domain- Domainbasierte Entfernungen sind eine Kategorie, die sich auch im öffentlichen Code nachvollziehen lässt
- Meist erschienen sie als
Removed: domain (spam), in manchen Fällen aber mit konkreteren Notizen - 2012 gab es einen Fall, in dem bestimmte Domains im Rahmen eines Tumblr-bezogenen Spam-Experiments entfernt wurden
- Auch Formulierungen wie
le sexxxxy sex spamtauchten als Löschgrund auf
-
spammitspammitscheint eine Kategorie zu sein, die Beiträge analysiert und einen Spam-Wahrscheinlichkeitswert in Prozent anhängt- In bestätigten Fällen reichten die Werte von 39.71% bis 98.19%
- In den betreffenden Subreddits wurden auch normale Imgur-Posts häufig mit 70–98 % Spam-Score entfernt, weshalb die Genauigkeit nicht besonders hoch wirkte
-
Gesperrte Nutzer und Shadowban
- Es gab Entfernungen wie
Removed: banned useroderRemoved: Reddit (banall performed) - Diese Fälle wirkten meist wie klarer Spam, etwa Links auf werbliche Dienste
- Beiträge von shadowbangebannten Nutzern wurden als
Removed: Reddit (shadowban applied on Datum)angezeigt - Ein Shadowban ist eine stille Sperre, bei der Nutzer weiter posten zu können scheinen, ihre Beiträge und Kommentare aber für andere unsichtbar sind
- Es gab Entfernungen wie
Die internen Bewertungsdaten, die spamurai offenlegte
- spamurai ist unter den offengelegten Kategorien der Eintrag mit den meisten internen Daten
- In öffentlich zugänglichen Präsentationsunterlagen hieß es, Reddit nutze für „ML“ Minsky und für „Rules“ Spamurai
- spamurai-Löschgründe enthielten sowohl einfache Regeln als auch detaillierte Datendumps
- Der Name
echelon, offenbar ein Untersystem, tauchte bei bestimmten Keyword-Entfernungen auf - Es gab einen Fall, in dem ein Konto unter 30 Minuten Alter einen Kommentar postete, der auf Spam-Bedingungen passte und entfernt wurde
- Sichtbar waren konkrete Regeln zu verdächtigem Shirt-Affiliate-Spam, URL-only-Kommentaren und Kommentaren mit hohem Perspective-Score
- Der Name
-
Felder im spamurai-Datendump
link t3_...odercomment t1_...ist Reddits fullname IDt1ist ein Kommentart2ist ein Nutzert3ist ein Beitragt4ist eine private Nachrichtt5ist ein Subreddit- Der Wert
perspective spamließ sich als SPAM-Score der Google-Perspective API bestätigen - Es waren kontobezogene Daten enthalten
- Kontenalter
spammy-Score- Karma
- Anzahl der Meldungen
- E-Mail-Domain
- ISP oder Organisationsname
- Auch Verbindungs- und Umgebungsdaten waren enthalten
- Nutzung von
oauth.reddit.com - User-Agent
- Sprach-Header
LANG - Referrer
RHS, offenbar ein Browser-Fingerprint- ein Wert, der wie ein TLS-Fingerprint aussieht
- Thumbnail-URL
- Beitragstext oder Kommentartext
- ursprünglicher Reddit-Link
- Nutzung von
Perspective API und Umgehungsmöglichkeiten
- Der Wert
0.12571795 perspective spamin den Reddit-Logs stimmt praktisch exakt mit einem Aufruf des SPAM-Attributs der Perspective API überein - Bei einem Aufruf der Perspective API mit demselben Text wurde
0.12571794zurückgegeben; die Differenz von 0.00000001 kann als Rundungsfehler gelten - Auch das Format der Beispielwerte in der Perspective-Dokumentation und ein vom Reddit-CTO zitiertes Beispiel gelten als Indizien dafür, dass Reddit Perspective nutzte
- Das SPAM-Attribut von Perspective ist keine Toxizitätserkennung, sondern ein experimentelles Attribut zur Spamerkennung und laut Dokumentation auf einem einzelnen Datensatz aus New-York-Times-Kommentaren und Moderationsdaten trainiert
- Seit Februar 2026 können in Google Cloud keine neuen Perspective-API-Projekte mehr erstellt werden, was neue Tests erschwert
-
Empfindliche Veränderungen der SPAM-Scores
- Die Perspective-SPAM-Scores änderten sich in manchen Fällen stark, wenn nur wenige Zeichen hinzugefügt wurden
Puppygirl Consulting is the best way to grow your revenueergibt 0.8638981- Mit angehängtem
qpfällt der Wert auf 0.010811162 - Die Ergebnisse deuten darauf hin, dass Zahlen sowie Groß-/Kleinschreibung ignoriert werden
- Auch beim Ändern der Ziffern einer Telefonnummer und der Groß-/Kleinschreibung wurde derselbe Score zurückgegeben
- Einige andere Schriftsysteme wurden ebenfalls mit demselben Score behandelt
- Unterschiedliche kyrillische Zeichenfolgen erhielten denselben Wert von 0.35077864
- Wenn in
Buy my productdas lateinischepdurch das kyrillischeрersetzt wird, sinkt der Score von 0.6473346 auf 0.4452748 - Wer Nachrichten anhand der öffentlichen API schrittweise veränderte, konnte möglicherweise einen der zentralen Bewertungsmaßstäbe von spamurai umgehen
Einbezug von Nutzermeldungen und Moderatorfreigaben
- spamurai scheint auch Nutzermeldungen in seine Löschregeln einzubeziehen
- Der Grund
REPORT: High spam perspective score on comment with hyperlink reported for spamdeutet darauf hin, dass ein Hyperlink-Kommentar, der als Spam gemeldet wurde, wegen eines hohen Perspective-Scores entfernt wurde und von einem Moderator wieder freigegeben werden konnte - Bei bestimmten Löschgründen erschien ein Hinweis, dass zukünftige Entfernungen abnehmen, wenn ein Moderator diesen Inhalt freigibt
- Das Argument
train_spaminadmintools.spamim öffentlichen Reddit-Code entscheidet, ob Moderatoraktionen für das Training des Anti-Spam-Systems verwendet werden - Daraus lässt sich schließen, dass das Freigeben legitimer Beiträge in einem Subreddit helfen kann, False Positives zu reduzieren
Weitere Löschregeln und URL-Prüfung
- Es gab Entfernungen von Pinterest-Redirect-Links,
mega.nz-Links und Links mit frei erstellbaren Subdomains - Unter den entfernten
mega.nz-Links befanden sich auch legitime Fälle wie archivierte YouTube-Videos, also False Positives - Im Fall
Matched forbidden regex u'torenteu'wurde etwas entfernt, obwohltorenteunicht direkt im Text vorkam- Reddit verwendete
unidecode, um Unicode-Zeichenfolgen in ASCII umzuwandeln - Das koreanische
토렌.트konnte nach Umwandlung und weiterer Verarbeitung mittorenteuübereinstimmen
- Reddit verwendete
- Im Fall
Failed inspection: Phrase(s) [u'UA-49307539-']zeigte sich, dass nicht der Kommentartext oder der umgewandelte Text übereinstimmte, sondern eine Google-Analytics-ID im HTML der per Redirect erreichten Seite inspectionscheint ein Vorgang zu sein, bei dem Reddit eine URL öffnet, Weiterleitungen verfolgt und anschließend auf der Seite nach Mustern sucht- Als auf einem Testkonto ein Link zu einer Webseite mit dieser Zeichenfolge gepostet wurde, wurde ein fünf Jahre altes Konto sofort gesperrt und seine Posting-Historie gelöscht
- Bei einem Freundeskonto mit umfangreicherer Aktivität ließ sich derselbe Effekt nicht reproduzieren
- Da unklar ist, ob der Filter noch aktiv war oder die Kontosperre Zufall war, wurde die tatsächliche Zeichenfolge verändert veröffentlicht
Frühere und aktuelle Bausteine von Reddits Anti-Spam-System
- Im Reddit-Engineering-Beitrag von 2023, Protecting Reddit Users in Real Time at Scale, werden Rule-Executor-V1, REV2 und Snooron erwähnt
- Die rekonstruierte Zeitleiste sieht so aus
- REV1 wurde 2016 entwickelt
- Snooron wurde 2021 gebaut, um REV1 zu modernisieren
- Etwa zwei Jahre später erfolgte die Migration auf REV2
- REV1 und REV2 arbeiten mit Lua-Regeln; Zeichenfolgen wie
nilund der zeitliche Kontext legen eine mögliche Verbindung zu spamurai nahe - Python-2.7-Unicode-Strings wie
u'torenteu'oderu'UA-49307539-'könnten auf Python-2.7-basierte Prüfungen außerhalb von spamurai oder auf einen separaten URL-Prüfcode hindeuten, den REV1 aufruft - Laut zugehörigem Vortrag läuft Snooron auf Flink Stateful Functions, führt Bildklassifizierung und OCR aus und verwendet Python 3 auf den Workern
- Laut Reddit-Dokumenten zur Australian-eSafety-Regulierung von 2024 nutzt Reddit für OCR sowie Bild- und Videoklassifizierung Hive AI und die Google Vision OCR API
- Hive OCR unterstützt 12 Sprachen; Google OCR wird zusätzlich für breitere Sprachunterstützung eingesetzt, und Reddit arbeitet laut den Unterlagen auch an einem internen Tool mit Unterstützung für 80 Sprachen
- In einem Ticket von 2009 wurde
crm114als Spam-Filter bestätigt, der Moderatortraining unterstützt; CRM114 ist eine ältere Open-Source-Software zur Spam-Klassifizierung
Warum die Veröffentlichung 2026 erfolgte
- Nach Einschätzung des Autors hätte eine Veröffentlichung dieser Informationen im Jahr 2021 Reddits Spam-Problem schwer verschärfen können
- 2026 steht die Perspective API is shutting down vor der Abschaltung zum Jahresende, sodass Reddit selbst bei weiterer Nutzung bald migrieren müsste
- Da LLMs die Spam-Industrie verändert haben, wird angenommen, dass Reddit sein Anti-Spam-System bis 2026 stark umgebaut hat
- Deshalb wird das Risiko einer Veröffentlichung dieser Informationen im Jahr 2026 als gering eingeschätzt
1 Kommentare
Meinungen auf Lobste.rs
Interessantes Material und eine spannende Untersuchung. Wie auch im Fazit erwähnt, bekommt man selten Gelegenheit, die Details solcher Anti-Missbrauchsmechanismen zu sehen; besonders aufgefallen ist mir dabei Lyras außergewöhnlich geschickter Umgang mit CSS.
Die Zensurbalken und roten Kreise in der nachgebauten Reddit-UI sahen für mich zunächst wie ein Screenshot aus, waren tatsächlich aber ein vollständig interaktives Mock-up.
Ich freue mich immer, wenn ein neuer Blogpost erscheint. Der Inhalt ist wirklich interessant, und die Fähigkeit, andere UIs nachzubauen, ist großartig.
Bisher habe ich mindestens ein Easter Egg gefunden.
Die Stelle war wirklich heftig, in der die Zeichenfolge
<pre>UA-49307539-2</pre>auf der Website gepostet und auf Reddit verlinkt wurde, um es mit dem eigenen Account zu testen, woraufhin ein fünf Jahre alter Test-Account sofort gesperrt und die gesamte Posting-Historie gelöscht wurde.Deshalb wurde die echte Nummer wohl zu
UA-49307539-geändert, um keinen Text zu veröffentlichen, der Accounts töten kann; ich hoffe, dieser Account war wirklich nur zum Testen da und nichts Wichtiges hing daran.Wenn ich versuche, es in Mobile Safari auf der neuesten iOS-Developer-Beta auf einem iPhone 16 Pro unter
<url>zu öffnen, bekomme ich den Fehler „a problem repeatedly occurred“ und kann es nicht ansehen.Ich wäre sehr dankbar, wenn jemand das HTML per binärer Suche durchgehen und die Ursache des Absturzes finden könnte.
Für alle, die sich fragen: Der enthaltene Perspective-API-Schlüssel ist nicht gültig.
bans (2016 - present)als Spam-Beispiel zensierte BeratungsfirmaPuppygirl Consultingheißt, ist für DevTools-Süchtige ein Hinweis darauf, dass die zensierten Stellen vermutlich gefälscht oder Easter Eggs sind :^)