Um vislumbre dos bastidores do antispam do Reddit
(lyra.horse)- Por causa de um fenômeno que parecia ser um erro temporário do Reddit em 2021, o Relay for reddit expôs motivos de remoção de spam em todo o site e dados internos de decisão que normalmente ficavam ocultos como
Removed: Auto - Pelo código do arquivo público, as informações de remoção eram transmitidas via
ban_info.banner; o Relay convertiabanned_by=trueda API para Auto, mas o problema parece ter surgido quando motivos internos passaram a aparecer no mesmo campo - Entre os motivos expostos estavam
domain,spammit,banned user,shadowbane spamurai; o spamurai incluía idade da conta, karma, número de denúncias, ISP, domínio de e-mail, User-Agent, cabeçalho de idioma, fingerprint TLS, referrer e até pontuação da Perspective API - A pontuação de SPAM da Perspective API do Google praticamente coincidia com os valores nos logs de remoção do Reddit, e foram confirmados casos em que a pontuação variava muito por características como adicionar poucos caracteres, substituir por caracteres cirílicos e ignorar maiúsculas/minúsculas e números
- O antispam do Reddit parece ser um sistema de múltiplas gerações que mistura verificações baseadas em Python 2.7, REV1/REV2 baseados em regras Lua, Snooron e ferramentas de OCR/classificação de imagem; em 2026, considera-se que o risco de divulgação ficou menor por causa do encerramento da Perspective API e das mudanças no spam impulsionadas por LLMs
Motivos de remoção revelados em 2021
- Um usuário que era moderador do Reddit, ao receber alertas de spam removido no app Relay for reddit em 2021, viu mensagens internas do antispam que normalmente não deveriam aparecer
- Na tela comum de moderação, uma remoção automática de spam aparece como
Removed: Auto, mas na ocasião o motivo real da remoção e dados internos surgiram em texto vermelho - O fenômeno voltou ao normal cerca de uma hora depois, e o único material restante são screenshots tiradas na época
Moderação do Reddit e a forma de exibição Auto
- Nos subreddits, as subcomunidades do Reddit, moderadores da comunidade cuidam da remoção de posts, bloqueio de usuários, gestão de modmail etc.
- Moderadores conseguem ver por quem um post ou comentário foi removido
- Remoções por moderadores comuns aparecem com o nome do moderador
- Remoções pelo AutoModerator aparecem como
AutoModerator - Remoções pelo filtro de spam de todo o site do Reddit ou por administradores podem aparecer como
Auto
- No log de moderação, remoções de todo o site aparecem como
redditouAnti-Evil Operations
Caminho de exposição visto pelo código do arquivo público
- O Reddit publicou seu código-fonte até 2017, e por esse código arquivado é possível rastrear parte do fluxo de processamento de remoções
- A função de remoção por moderador
POST_removechamaadmintools.spammoderator_banneddistingue se quem removeu foi um moderador ou um administradorbannerregistra o nome do usuário que executou a remoção
get_mod_attributesexporta oban_infodo item removido na resposta da API- Quando a remoção foi feita por um moderador, retorna o valor de
bannercomobanned_by - Quando a remoção foi feita por um administrador, retorna
Trueem vez do nome real
- Quando a remoção foi feita por um moderador, retorna o valor de
- Pelo código decompilado, o Relay for reddit exibia
bannedBycomo a stringAutoquando seu valor era"true" - No Reddit, também havia um caminho de código que, ao detectar um domínio proibido no envio de links, colocava o motivo interno no campo
banner, comobanner = "domain (REASON)" - O campo
bannercontendo motivos internos de remoção originalmente deveria ser visível apenas para administradores de todo o site, mas presume-se que tenha sido exposto a moderadores por um erro em um caminho de código semelhante
Categorias de motivos de remoção expostos
-
domain- Remoção baseada em domínio é uma categoria verificável também no código público
- A maioria aparecia na forma
Removed: domain (spam), mas em alguns casos havia observações específicas - Houve um caso de remoção de um domínio específico em 2012 para um experimento de spam relacionado ao Tumblr
- Expressões como
le sexxxxy sex spamtambém apareciam como motivo de remoção
-
spammitspammitparece ser uma categoria que analisa posts e atribui uma porcentagem de probabilidade de spam- As pontuações dos casos de remoção confirmados iam de 39,71% a 98,19%
- Nesses subreddits, também houve muitos casos em que posts legítimos do Imgur foram removidos com pontuações de spam de 70% a 98%, então a precisão não parecia alta
-
Usuários banidos e shadowban
- Houve remoções no formato
Removed: banned userouRemoved: Reddit (banall performed) - Esses casos, em sua maioria, pareciam posts claramente spam, como links para serviços publicitários
- Posts de usuários em shadowban apareciam como
Removed: Reddit (shadowban applied on data) - Shadowban é um bloqueio silencioso em que, para o próprio usuário, parece que ele ainda consegue postar, mas seus posts e comentários não aparecem para outras pessoas
- Houve remoções no formato
Dados internos de decisão revelados pelo spamurai
- spamurai é o item que mais incluía dados internos entre as categorias expostas
- Materiais de apresentação públicos diziam que o Reddit usava Minsky para “ML” e Spamurai para “Rules”
- Os motivos de remoção do spamurai vinham com regras simples e dumps detalhados de dados
- Um nome que parecia ser um subsistema chamado
echelonaparecia em remoções por palavras-chave específicas - Houve um caso de remoção quando uma conta com menos de 30 minutos postou um comentário que atendia a condições de spam
- Regras específicas ficavam visíveis, como spam suspeito de afiliados de camisetas, comentários apenas com URL e comentários com pontuação alta no Perspective
- Um nome que parecia ser um subsistema chamado
-
Itens nos dumps de dados do spamurai
link t3_...oucomment t1_...são fullname IDs do Redditt1é comentáriot2é usuáriot3é postt4é mensagem privadat5é subreddit- O valor
perspective spamfoi identificado como a pontuação de SPAM da Perspective API do Google - Incluía dados relacionados à conta
- Idade da conta
- Pontuação
spammy - Karma
- Número de denúncias
- Domínio de e-mail
- ISP ou nome da organização
- Também havia dados de acesso e ambiente
- Uso ou não de
oauth.reddit.com - User-Agent
- Cabeçalho de idioma
LANG - Referrer
RHS, que parece ser fingerprint de navegador- Valor que parece ser fingerprint TLS
- URL da thumbnail
- Corpo do post ou comentário
- Link original do Reddit
- Uso ou não de
Perspective API e possibilidade de contorno
- O valor
0.12571795 perspective spamno log do Reddit praticamente coincide com o resultado de uma chamada ao atributo SPAM da Perspective API - Ao chamar a Perspective API com o mesmo texto, o retorno foi
0.12571794, e a diferença de 0,00000001 pode ser vista como erro de arredondamento - O formato das pontuações de exemplo na documentação do Perspective e uma citação de caso pelo CTO do Reddit também são usados como indícios de que o Reddit usava o Perspective
- O atributo SPAM do Perspective não é detecção de toxicidade, mas um atributo experimental para detecção de spam, e teria sido treinado com um único dataset de comentários do New York Times e dados de moderação
- Depois de fevereiro de 2026, não será mais possível criar novos projetos da Perspective API no Google Cloud, dificultando novos testes
-
Variações sensíveis na pontuação de SPAM
- Houve casos em que a pontuação de SPAM do Perspective mudava muito com a adição de apenas alguns caracteres
Puppygirl Consulting is the best way to grow your revenuerecebe 0.8638981- Ao acrescentar
qpno fim, cai para 0.010811162 - Os resultados sugerem que números e maiúsculas/minúsculas são ignorados
- Mesmo alterando os dígitos de um número de telefone e as maiúsculas/minúsculas, a mesma pontuação era retornada
- Alguns outros sistemas de escrita também eram tratados com a mesma pontuação
- Strings diferentes em cirílico receberam a mesma pontuação 0.35077864
- Em
Buy my product, trocar oplatino porрcirílico reduzia a pontuação de 0.6473346 para 0.4452748 - Com base na API pública, é possível que pequenas alterações na mensagem permitissem contornar um dos principais critérios de decisão do spamurai
Reflexo de denúncias de usuários e aprovações de moderadores
- O spamurai também parece levar denúncias de usuários em conta nas regras de remoção
- O motivo
REPORT: High spam perspective score on comment with hyperlink reported for spamindica que um comentário com hyperlink denunciado como spam foi removido por ter pontuação alta no Perspective, e que um moderador poderia reaprovar - Certos motivos de remoção incluíam uma frase dizendo que, se um moderador aprovasse esse conteúdo, haveria menos remoções no futuro
- O argumento
train_spamemadmintools.spamno código público do Reddit decide se ações de moderadores serão usadas no treinamento do antispam - É possível interpretar que aprovar posts legítimos em um subreddit poderia ajudar a reduzir falsos positivos
Outras regras de remoção e inspeção de URLs
- Também houve casos de remoção de links de redirect do Pinterest, links
mega.nze links relacionados a subdomínios que podem ser criados livremente - Entre as remoções de links
mega.nz, também houve casos legítimos que na verdade eram links para vídeos arquivados do YouTube, indicando falsos positivos - O caso
Matched forbidden regex u'torenteu'foi removido apesar detorenteunão aparecer diretamente no corpo do texto- O Reddit usa
unidecodepara converter strings Unicode em ASCII 토렌.트em coreano podia passar pela conversão e por processamento adicional e corresponder atorenteu
- O Reddit usa
- O caso
Failed inspection: Phrase(s) [u'UA-49307539-']não parecia corresponder ao corpo do comentário nem ao texto convertido, mas ao ID do Google Analytics dentro do HTML da página para a qual o link redirecionava inspectionparece ser uma operação em que o Reddit abre a URL, segue redirects e procura padrões na página- Ao publicar, em uma conta de teste, um link para uma página web que continha essa string, uma conta de 5 anos foi imediatamente banida e seu histórico de posts foi apagado
- Em uma conta de amigo com mais histórico de atividade, a mesma reprodução não aconteceu
- Como não há certeza se o filtro ainda está ativo ou se o banimento da conta foi coincidência, a string real foi alterada antes da publicação
Componentes antigos e atuais do antispam do Reddit
- O post de 2023 da Reddit Engineering Protecting Reddit Users in Real Time at Scale menciona Rule-Executor-V1, REV2 e Snooron
- A linha do tempo entendida é a seguinte
- REV1 foi criado em 2016
- Snooron foi desenvolvido em 2021 para modernizar o REV1
- Cerca de 2 anos depois, houve migração para o REV2
- REV1 e REV2 funcionam com regras Lua, e strings como
nile o momento histórico sugerem uma possível ligação com o spamurai - Strings Unicode de Python 2.7 como
u'torenteu'eu'UA-49307539-'podem vir de código de inspeção baseado em Python 2.7 fora do spamurai, ou de um código separado de inspeção de URLs chamado pelo REV1 - Segundo uma apresentação relacionada, o Snooron roda sobre Flink Stateful Functions, realiza classificação de imagens e OCR e usa Python 3 nos workers
- Em 2024, em um documento da Australian eSafety, o Reddit afirmou usar Hive AI e Google Vision OCR API para OCR e classificação de imagens/vídeos
- O Hive OCR suporta 12 idiomas, e o Google OCR é usado em conjunto para dar suporte a mais idiomas; o Reddit também estaria trabalhando em uma ferramenta interna com suporte a 80 idiomas
- Em um ticket de 2009, foi confirmado que
crm114era um filtro de spam treinável por moderadores, e CRM114 é um software antigo de classificação de spam open source
Por que divulgar em 2026
- O autor avaliou que, se essas informações tivessem sido divulgadas em 2021, poderiam ter sido fatais para o problema de spam do Reddit
- Em 2026, Perspective API is shutting down está prevista para encerrar no fim do ano, então, mesmo que o Reddit ainda a use, terá que migrar em breve
- Como LLMs mudaram a indústria de spam, o autor presume que o Reddit tenha reformulado bastante seu sistema antispam para 2026
- Por esses motivos, considera-se que, atualmente em 2026, o risco de divulgar essas informações é baixo
1 comentários
Opiniões no Lobste.rs
Material e pesquisa interessantes. Como dito na conclusão, é raro ter a chance de ver os detalhes desse tipo de mecanismo antiabuso, e o que chamou especialmente a atenção foi a habilidade peculiar da Lyra com CSS.
As barras de censura e o círculo vermelho na UI reconstruída do Reddit pareceram, a princípio, uma captura de tela, mas na verdade eram uma maquete totalmente interativa.
Sempre fico na expectativa quando sai um novo post no blog. O conteúdo é realmente interessante, e a habilidade de reproduzir outras UIs também é excelente.
Até agora, encontrei pelo menos um easter egg.
Achei bem pesado o trecho em que a pessoa colocou a string
<pre>UA-49307539-2</pre>no site para testar com a própria conta e linkou no Reddit, e então uma conta de teste de 5 anos foi suspensa imediatamente e todo o histórico de posts também foi apagado.Por isso, o número real foi alterado para
UA-49307539-, para não publicar um texto capaz de matar uma conta; espero que essa conta fosse mesmo só de teste e não tivesse nada importante.Ao tentar abrir no Safari móvel no beta de desenvolvedor mais recente do iOS no iPhone 16 Pro, aparece o erro “a problem repeatedly occurred” em
<url>, então não dá para ver.Eu ficaria muito grato se alguém fizesse uma busca binária no HTML e encontrasse a causa do crash.
Para quem estiver curioso, a chave da Perspective API incluída não é válida.
bans (2016 - present), o fato de a empresa de consultoria censurada como exemplo de spam serPuppygirl Consultingdá aos viciados em ferramentas de desenvolvedor uma pista de que as partes censuradas provavelmente são falsas ou easter eggs :^)