Extensão:Filtro de abusos
AbuseFilter Estado da versão: estável |
|
---|---|
Implementação | Atividade dos usuários , Página especial , API |
Descrição | Permite inserir restrições baseadas em comportamentos específicos na atividade wiki. |
Autor(es) |
|
Política de compatibilidade |
Snapshots releases along with MediaWiki. Master is not backward compatible. |
Modifica o banco de dados |
Sim |
Composer | mediawiki/abuse-filter |
Tabelas | abuse_filter abuse_filter_action abuse_filter_history abuse_filter_log |
Licença | GNU GPL (Licença Pública Geral) 2.0 ou superior |
Download | |
|
|
|
|
|
|
|
|
Quarterly downloads | 125 (Ranked 42nd) |
Public wikis using | 2,939 (Ranked 186th) |
Para traduzir a extensão AbuseFilter, verifique sua disponibilidade no translatewiki.net | |
Problemas | Tarefas em aberto · Relatar um bug |
A extensão AbuseFilter permite que usuários com este privilégio definam ações específicas a serem tomadas quando usuários realizam ações, como edições, que correspondam a certos critérios.
Por exemplo, um filtro poderia ser criado para evitar que usuários anônimos adicionassem ligações externas, ou para bloquear um usuários que remova mais de 2 000 caracteres.
Instalação
- Baixe e coloque o(s) arquivo(s) num diretório chamado
AbuseFilter
na sua pastaextensions/
.
Developers and code contributors should install the extension from Git instead, using:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter - Se estiver instalando a partir do git, execute o Composer para instalar as dependências PHP através de
composer install --no-dev
no diretório da extensão. (Veja tarefa T173141 para possíveis complicações.) - Adicione o seguinte código ao final do seu arquivo LocalSettings.php :
wfLoadExtension( 'AbuseFilter' );
- Execute o script de atualização que criará automaticamente as tabelas de banco de dados necessárias a essa extensão.
- Configure conforme o necessário.
- Concluído – Navegue à página Special:Version em sua wiki para verificar se a instalação da extensão foi bem sucedida.
Portanto, após a instalação do Git, mude para o diretório que contém a extensão, por exemplo "../extensions/AbuseFilter/" e execute composer install --no-dev
, ou ao atualizar: composer update --no-dev
.
Alternativamente, bem como de preferência, adicione a linha "extensions/AbuseFilter/composer.json"
ao arquivo "composer.local.json" no diretório raiz da sua wiki, como por exemplo
{
"extra": {
"merge-plugin": {
"include": [
"extensions/AbuseFilter/composer.json"
]
}
}
}
Configuração
Direitos de usuário
Uma vez instalada a extensão, você terá de estabelecer os direitos de usuário no arquivo "LocalSettings.php".
Direito | Descrição | Notes | User groups that have this right by default | Versions |
---|---|---|---|---|
abusefilter-modify | Criar ou modificar filtros de abuso | Requires the abusefilter-view right
|
sysop | 1.19+ |
abusefilter-view | Ver filtros de abusos | * | 1.19+ | |
abusefilter-log | Ver o registro de abusos | * | 1.19+ | |
abusefilter-log-detail | Ver entradas detalhadas do registro de abusos | Requires the abusefilter-log right
|
sysop | 1.19+ |
abusefilter-privatedetails | Ver dados privados no registro de abusos | Prior to 1.34 this right was named abusefilter-private - Requires the abusefilter-log-detail right
|
— | 1.19+ |
abusefilter-modify-restricted | Modificar filtros de abusos com ações restritas | Requires the abusefilter-modify right
|
sysop | 1.19+ |
abusefilter-revert | Reverter todas as modificações feitas por um dado filtro de abusos | sysop | 1.19+ | |
abusefilter-view-private | Ver filtros de abuso marcados como privados | Requires the abusefilter-view right (not needed if the group already has the abusefilter-modify right)
|
sysop | 1.19+ |
abusefilter-hide-log | Ocultar entradas do filtro de abusos | Requires the abusefilter-log right
|
suppress | 1.19+ |
abusefilter-hidden-log | Ver entradas ocultadas do registro de abusos | Requires the abusefilter-log right
|
suppress | 1.19+ |
abusefilter-log-private | Ver registro de entrada do fitro de abusos marcados como privados | Requires the abusefilter-log right (not needed if the group already has the abusefilter-modify or abusefilter-view-private rights)
|
sysop | 1.20+ |
abusefilter-modify-global | Criar ou modificar filtros de abuso global | Requires the abusefilter-modify right
|
— | 1.21+ |
abusefilter-privatedetails-log | Veja o registro de acesso de detalhes privados no Filtro de abuso | Prior to 1.34 this right was named abusefilter-private-log
|
— | 1.31+ |
abusefilter-modify-blocked-external-domains | Criar ou modificar quais domínios externos são bloqueados de se tornarem ligações (links) | sysop | 1.41+ | |
abusefilter-bypass-blocked-external-domains | Ignorar quais domínios externos estão bloqueados | Requires the edit right
|
bot | 1.41+ |
abusefilter-access-protected-vars | Ver e criar filtros que usam variáveis protegidas | sysop | 1.43+ | |
abusefilter-protected-vars-log | View logs related to accessing protected variable values | sysop | 1.43+ |
Por exemplo, a configuração de exemplo a seguir permitiria sysops fazerem tudo o que quisessem com o AbuseFilter, e todo mundo visualizaria o registro e as configurações de filtro público:
$wgGroupPermissions['sysop']['abusefilter-modify'] = true;
$wgGroupPermissions['*']['abusefilter-log-detail'] = true;
$wgGroupPermissions['*']['abusefilter-view'] = true;
$wgGroupPermissions['*']['abusefilter-log'] = true;
$wgGroupPermissions['sysop']['abusefilter-privatedetails'] = true;
$wgGroupPermissions['sysop']['abusefilter-modify-restricted'] = true;
$wgGroupPermissions['sysop']['abusefilter-revert'] = true;
$wgGroupPermissions['sysop']['abusefilter-access-protected-vars'] = true;
$wgGroupPermissions['sysop']['abusefilter-protected-vars-log'] = true;
abusefilter-access-protected-vars
permission. Logs pertaining to these filters can only be viewed by users with the abusefilter-protected-vars-log
permission. For more information, see Rules format .
Parâmetros
Nome da variável | Valor padrão | Descrição |
---|---|---|
$wgAbuseFilterActions
|
[
'throttle' => true,
'warn' => true,
'disallow' => true,
'blockautopromote' => true,
'block' => true,
'rangeblock' => false,
'degroup' => false,
'tag' => true
]
|
As ações possíveis que podem ser realizadas pelos filtros de abuso. Ao adicionar uma nova ação, verifique se ela está restrita em $wgAbuseFilterActionRestrictions e, se for, não se esqueça de adicionar o direito abusefilter-modify-restricted aos grupos de usuários apropriados.
|
$wgAbuseFilterConditionLimit
|
1000
|
O número máximo de 'condições' que pode ser usado cada vez que os filtros são aplicadas a uma alteração. (Filtros mais complexos requerem mais 'condições'). |
$wgAbuseFilterValidGroups
|
[
'default'
]
|
A lista de filtros de "grupos" pode ser dividida. Por padrão, há apenas um grupo. Outras extensões podem adicionar outros grupos. |
$wgAbuseFilterEmergencyDisableThreshold
|
[
'default' => 0.05
]
|
Desabilite um filtro se ele corresponder a mais de 2 edições, constituindo mais de 5% das ações que foram verificadas em relação ao grupo do filtro no período "observado" (no máximo um dia) e o filtro tiver sido alterado nos últimos 86.400 segundos (um dia). Veja estrangulamento de emergência. |
$wgAbuseFilterEmergencyDisableCount
|
[
'default' => 2
]
| |
$wgAbuseFilterEmergencyDisableAge
|
[
'default' => 86400
]
| |
$wgAbuseFilterActionRestrictions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => true,
"block" => true,
"rangeblock" => true,
"degroup" => true,
"tag" => false
]
|
Os usuários devem ter o direito de usuário "abusefilter-modify-restricted" bem como "abusefilter-modify" a fim de criar ou modificar os filtros que realizam essas ações. |
$wgAbuseFilterNotifications
|
false
|
Permite configurar a extensão para enviar notificações de sucesso para Special:RecentChanges ou UDP. Opções disponíveis: rc, udp, rcandudp
For sending changes to abuse filters to Special:RecentChanges, use
unset($wgLogRestrictions['abusefilter']); . |
$wgAbuseFilterNotificationsPrivate
|
false
|
Habilitar notificações para filtros privados. |
$wgAbuseFilterCentralDB
|
null
|
MW 1.41+ Nome de um banco de dados onde os filtros de abuso globais serão armazenados (apenas suportado na última versão de desenvolvimento). Requer CentralAuth instalado, caso contrário, os filtros globais serão interrompidos em uma wikifarm. |
$wgAbuseFilterIsCentral
|
false
|
MW 1.41+ Defina esta variável como true para a wiki onde AbuseFilters globais são armazenados (suportado apenas na última versão em desenvolvimento). Requer CentralAuth instalado, caso contrário, os filtros globais serão interrompidos em uma wikifarm. |
$wgAbuseFilterLocallyDisabledGlobalActions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => false,
"block" => false,
"rangeblock" => false,
"degroup" => false,
"tag" => false
]
|
Impedir que filtros centralizados realizem ações definidas como verdadeiras nesta variável. |
$wgAbuseFilterBlockDuration
|
'indefinite'
|
Duração dos bloqueios efetuados pelo AbuseFilter
a partir de 1.31.0-wmf.25, as durações dos bloqueios podem ser especificadas para cada filtro e substituirão essa variável. Esta variável só é usada ao habilitar o bloco para pré-selecionar uma duração padrão.
|
$wgAbuseFilterAnonBlockDuration
|
null
|
Duração de bloqueios feitos pelo AbuseFilter em usuários que não estão logados. O valor de $wgAbuseFilterBlockDuration será usado se ela não estiver definida.
a partir de 1.31.0-wmf.25, as durações dos bloqueios podem ser especificadas para cada filtro e substituirão essa variável. Esta variável só é usada ao habilitar o bloqueio para pré-selecionar uma duração padrão.
|
$wgAbuseFilterBlockAutopromoteDuration
|
5
|
Duração, em dias, durante a qual a autopromoção dos usuários é bloqueada por filtros. |
$wgAbuseFilterDefaultWarningMessage
|
[
'default' => 'abusefilter-warning'
]
|
Mensagens de aviso padrão, por filtro de grupo |
$wgAbuseFilterDefaultDisallowMessage
|
[
'default' => 'abusefilter-disallowed'
]
|
Mensagens de bloqueio padrão, por grupo de filtro |
$wgAbuseFilterLogIP
|
true
|
Se deve incluir o IP no abuse_filter_log |
$wgAbuseFilterLogIPMaxAge
|
3 * 30 * 24 * 3600
|
Idade utilizada como ponto de corte ao purgar dados de registro de IP antigos. Padrão para 3 meses. Usado pelo script de manutenção purgeOldLogIPData.php. |
$wgAbuseFilterProfileActionsCap
|
10000
|
Número de ação que determina quando redefinir as estatísticas de criação de perfil. |
$wgAbuseFilterLogPrivateDetailsAccess
|
false
|
Se o acesso a informações privadas de uma entrada de registro de filtro é registrado. |
$wgAbuseFilterPrivateDetailsForceReason
|
false
|
Se os usuários são forçados a fornecer um motivo para acessar informações privadas de uma entrada de registro de filtro. |
$wgAbuseFilterSlowFilterRuntimeLimit
|
500
|
O tempo de execução em milissegundos antes de um filtro ser considerado lento. |
$wgAbuseFilterRangeBlockSize
|
[
'IPv4' => '16',
'IPv6' => '19',
]
|
Tamanho do intervalo bloqueado pela ação 'rangeblock'. |
$wgAbuseFilterProtectedVariables
|
[ "user_unnamed_ip" ]
|
Array of variables that are be considered protected (limited access) and require the abusefilter-access-protected-vars right to use/view.
|
Supressão de emergência
O AbuseFilter vem com um recurso que suprime (desabilita) automaticamente os filtros que foram editados recentemente e correspondem a um determinado limite das ações mais recentes.
Isso é feito para evitar edições prejudiciais nos filtros para bloquear todos os usuários que executam uma ação em uma wiki ou semelhante.
A condição para desativar o filtro depende dessas variáveis:
$wgAbuseFilterEmergencyDisableThreshold
- Porcentagem de correspondências sobre a quantidade total de ações no período observado.$wgAbuseFilterEmergencyDisableCount
- Quantidade de correspondências do filtro no período observado.$wgAbuseFilterEmergencyDisableAge
- Idade do filtro considerado. Se a última edição do filtro for anterior a esse número de segundos, o filtro não será regulado, a menos que já esteja regulado.
Os filtros suprimidos podem ser identificados na lista de filtros (Especial:AbuseFilter) com o estado Ativo, Alta taxa de correspondências. A supressão ocorre silenciosamente e não há como saber quando um filtro foi suprimido, exceto quando Extension:Echo é instalado, então uma notificação é enviada ao último usuário a modificar o filtro.
Quando um filtro é suprimido, ele não executa nenhuma ação perigosa (ações geralmente restritas a direitos especiais como bloquear o usuário ou removê-lo de grupos, controlados por $wgAbuseFilterActionRestrictions), e apenas ações "seguras" são permitidas (aquelas que podem avisar ou impedir a ação em andamento). Filtros suprimidos não são ativados automaticamente. Para desativar a supressão, você precisará editar o filtro. Observe que você realmente precisará mudar algo no filtro: algo como as notas do filtro será suficiente.
Observe que editar o filtro atualiza sua idade e pode fazer com que ele seja desativado se atingir novamente as condições para ser suprimido em um curto período desde a última edição, levando a um filtro inutilizável se sua wiki tiver mais edições de abuso do que legítimas.
Criando e gerenciando filtros
Uma vez que a extensão foi instalada, filtros podem ser criados/testados/alterados/excluídos e os registros podem ser acessados a partir da página de gerenciamento do AbuseFilter Special:AbuseFilter.
- Formato das regras - Princípios de como desenvolver um filtro
- Ações
- Regras globais
- Guia de otimização do uso limite de condições
- Para importar filtros da Wikipédia: Após instalar a extensão, vá para pt:Especial:Filtro de abusos, escolha um filtro (p. ex. pt:Especial:Filtro de abusos/3) e clique em “Exportar este filtro para outra wiki”, copie o texto, vá para “Special:AbuseFilter/import” na sua wiki e cole o texto.
- m:Small wiki toolkits/Starter kit/AbuseFilter - Um guia para pequenas comunidades wiki em metawiki
API
O AbuseFilter adiciona dois módulos de lista de API, uma para detalhes dos filtros de abuso ("abusefilters") e um para o registro de abusos, uma vez que este é separado de outros registros do MediaWiki ("abuselog"). Não é possível criar ou modificar filtros de abuso usando a API.
list = abusefilters
Lista informações sobre filtros
- Parâmetros
abfstartid
- O ID do filtro de onde inicia-se a enumeraçãoabfendid
- O ID de filtro onde interrompe-se a enumeraçãoabfdir
- A direção na qual enumerar (mais antigo, mais recente)abfshow
- Mostra apenas filtros que atendem a esses critérios (enabled|!enabled|deleted|!deleted|private|!private)abflimit
- O número máximo de filtros para listarabfprop
- Quais propriedades para se obter (id|description|pattern|actions|hits|comments|lasteditor|lastedittime|status|private)
Quando os filtros são private, algumas das propriedades especificadas com abfprop
estarão ausentes, a menos que você tenha os direitos de usuário apropriados.
- Exemplos
Resultado |
---|
{
"batchcomplete": "",
"continue": {
"abfstartid": 18,
"continue": "-||"
},
"query": {
"abusefilters": [
{
"id": 1,
"hits": 41430
},
{
"id": 3,
"hits": 957485
},
{
"id": 5,
"hits": 5931
},
{
"id": 6,
"hits": 19
},
{
"id": 8,
"hits": 7
},
{
"id": 9,
"hits": 41354
},
{
"id": 11,
"hits": 132971
},
{
"id": 12,
"hits": 139693
},
{
"id": 14,
"hits": 63
},
{
"id": 15,
"hits": 15
}
]
}
}
|
list = abuselog
Lista casos em que as ações desencadearam um filtro de abuso.
- Parâmetros
aflstart
- O timestamp de onde se inicia a enumeraçãoaflend
- O timestamp onde se para a enumeraçãoafldir
- A direção na qual se realiza a enumeração (mais antigo, mais recente)afluser
- Mostra apenas as entradas onde a ação foi tentada por um determinado usuário ou endereço IP.afltitle
- Mostra apenas as entradas onde a ação envolveu uma determinada página.aflfilter
- Mostra apenas as entradas que desencadearam um determinado ID de filtroafllimit
- O número máximo de entradas para listaraflprop
- Quais propriedades a serem obtidas: (ids|filter|user|ip|title|action|details|result|timestamp|hidden|revid|wiki)
- Exemplo
Resultado |
---|
{
"batchcomplete": "",
"continue": {
"aflstart": "2018-03-06T02:34:18Z",
"continue": "-||"
},
"query": {
"abuselog": [
{
"id": 27219261,
"filter_id": "1073"
},
{
"id": 26938051,
"filter_id": ""
},
{
"id": 23388942,
"filter_id": "1"
},
{
"id": 22044912,
"filter_id": ""
},
{
"id": 22032235,
"filter_id": ""
},
{
"id": 22032196,
"filter_id": ""
},
{
"id": 21983882,
"filter_id": ""
},
{
"id": 20594818,
"filter_id": "904"
},
{
"id": 20593489,
"filter_id": "904"
},
{
"id": 20590442,
"filter_id": "904"
}
]
}
}
|
Possíveis erros
- Alguns usuários podem perceber que a criação de novos filtros ou a modificação de filtros antigos falham e o usuário é redirecionado para a página original. Se a Wiki estiver usando certificados SSL, esse erro pode ser devido ao valor
$wgServer
, que pode estar usando "http://" em vez de "https://". Uma indicação desse erro será o navegador dando um aviso de https para páginas Special:AbuseFilter. (Topic:T23dyyih0ofjada5)
Integração com outras extensões
Você pode integrar o filtro de abusos com outra extensão de várias maneiras.
Adicionando variáveis para filtragem
É possível adicionar novas variáveis, para serem utilizadas em filtros de abuso. Uma lista de exemplos está disponível . Para fazer isso, você deve:
- Adicione um manipulador para o gancho AbuseFilter-builder . Para adicionar uma variável, você deve usar
$builder['vars']['variable_name'] = 'i18n-key';
, ondevariable_name
é o nome da variável ei18n-key
é o fragmento de uma chave i18n. A chave completa seráabusefilter-edit-builder-vars-{$your_key}
. - Adicione as mensagens i18n que você escolheu no ponto anterior.
- Escolha um manipulador de gancho onde a variável será calculada. Dependendo do seu caso de uso, você pode:
- Implemente o gancho AbuseFilter-generateTitleVars ; isso é pensado especificamente para variáveis relacionadas à página;
- Implemente o gancho AbuseFilter-generateUserVars ; isso é pensado especificamente para variáveis relacionadas ao usuário;
- Implemente o gancho AbuseFilter-generateGenericVars ; isso é para variáveis não vinculadas a uma página ou usuário específico;
- Implemente o gancho AbuseFilterAlterVariables ; isso é um pouco mais flexível do que os outros ganchos, mas tem uma desvantagem: sua variável não estará disponível ao examinar entradas anteriores de mudanças recentes. Se você quiser implementar esse recurso (e é recomendado fazer isso), você deve usar um dos ganchos listados acima e usar seu terceiro parâmetro (
$RCRow
).
- Dentro do gerenciador de gancho, existem duas maneiras de adicionar uma variável:
- A forma "direta" é chamar
$vars->setVar( 'var_name', var_value );
. Isso é ideal apenas quando o valor é fácil e rápido de calcular: o valor é calculado mesmo se nenhum filtro ativo o usar. - A maneira "preguiçosa" é chamar
$vars->setLazyLoadVar( 'var_name', 'method_name', $params );
. Aqui, 'method_name' é um identificador (único) que será usado para calcular a variável (é recomendado prefixá-lo com o nome de sua extensão). Para registrar o método, você deve adicionar um manipulador para o gancho AbuseFilter-computeVariable ; nele, você deve verificar se o $method passado corresponde ao seu 'nome_do_método' e, em caso afirmativo, calcular a variável. Por último, $params é uma matriz de parâmetros de que você precisará para calcular a variável; eles são passados para o manipulador de gancho computeVariable. Para obter um exemplo disso, você pode verificar o CentralAuthglobal_user_groups
.global_user_groups
.
- A forma "direta" é chamar
Adicionar ações personalizadas
Você pode adicionar manipuladores de ação personalizados, para que cada filtro possa executar outras ações. Para fazer isso, você escolhe um nome para a ação ('my-action' de agora em diante) e, em seguida:
- Crie uma classe chamada, por exemplo MyAction, que deve estender \MediaWiki\Extension\AbuseFilter\Consequence, que também pode implementar HookAborterConsequence ou ConsequencesDisablerConsequence
- Adicione um assinante ao gancho AbuseFilterCustomActions; o assinante deve fornecer um retorno de chamada, conforme documentado na documentação do gancho, que retorna uma instância da classe criada acima, por exemplo:
class MyAction extends \MediaWiki\Extension\AbuseFilter\Consequence {
public function run() {
throw new \Exception( 'Write me' );
}
}
public function onAbuseFilterCustomActions( &$actions ) {
$actions[] = function ( \MediaWiki\Extension\AbuseFilter\Consequence\Parameters $params, array $rawParams ) : MyConsequence {
return new MyAction( $params, $rawParams );
};
}
Então você deve adicionar as seguintes mensagens i18n; você pode substituir 'my_action' por, por exemplo, 'block' para ver para que servem as mensagens:
'abusefilter-edit-action-${my_action}'
'abusefilter-action-${my_action}'
Adicionando grupos de regras
Você também pode adicionar grupos de regras extras, que podem ser usados para agrupar filtros de abuso existentes. Observe que, no momento, cada filtro só pode estar em um único grupo (T116642). Atualmente, o único consumidor conhecido desse recurso é Extension:StructuredDiscussions . Para fazer isso, você deve:
- Anexe o nome do grupo a
$wgAbuseFilterValidGroups
- Adicione algum código para executar os filtros com seu grupo. Observe que filtro de abusos não fará isso por conta própria. Para fazer isso, você deve construir um objeto
AbuseFilterRunner
, passando o nome do seu grupo.
Ver também
- Várias wikis da WMF onde ela está habilitada (e com qual configuração)
Esta extensão está sendo usada(o) por um ou mais projetos da Wikimedia. Isto significa que, provavelmente, a extensão é estável e funciona bem o suficiente para ser utilizada(o) em sites da web de alto tráfego. Procure pelo nome dessa extensão nos arquivos de configuração CommonSettings.php e InitialiseSettings.php da Wikimedia para verificar onde ela foi instalada. Uma lista completa das extensões instaladas numa wiki em particular podem ser visualizadas na página Special:Version da wiki. |
Esta extensão está incluída nas seguintes fazendas/hospedagens (farms/hosts) e/ou pacotes wiki: Esta não é uma lista autoritativa (oficial). Algumas fazendas/hospedagens (farms/hosts) e/ou pacotes wiki podem conter esta extensão mesmo que não estejam listados aqui. Sempre verifique com suas fazendas/hospedagens (farms/hosts) ou pacotes wiki para confirmar. |
- Extensions bundled with MediaWiki 1.38/pt-br
- Stable extensions/pt-br
- User activity extensions/pt-br
- Special page extensions/pt-br
- API extensions/pt-br
- Extensions supporting Composer/pt-br
- GPL licensed extensions/pt-br
- Extensions in Wikimedia version control/pt-br
- BeforeCreateEchoEvent extensions/pt-br
- ChangeTagsListActive extensions/pt-br
- CheckUserInsertChangesRow extensions/pt-br
- CheckUserInsertLogEventRow extensions/pt-br
- CheckUserInsertPrivateEventRow extensions/pt-br
- ContributionsToolLinks extensions/pt-br
- EditFilterMergedContent extensions/pt-br
- GetAutoPromoteGroups extensions/pt-br
- GetPreferences extensions/pt-br
- HistoryPageToolLinks extensions/pt-br
- JsonValidateSave extensions/pt-br
- ListDefinedTags extensions/pt-br
- LoadExtensionSchemaUpdates extensions/pt-br
- PageDelete extensions/pt-br
- PageSaveComplete extensions/pt-br
- ParserOutputStashForEdit extensions/pt-br
- RecentChange save extensions/pt-br
- SaveUserOptions extensions/pt-br
- TitleMove extensions/pt-br
- UndeletePageToolLinks extensions/pt-br
- UploadStashFile extensions/pt-br
- UploadVerifyUpload extensions/pt-br
- UserMergeAccountFields extensions/pt-br
- GetUserPermissionsErrors extensions/pt-br
- All extensions/pt-br
- Extensions requiring Composer with git/pt-br
- Extensions used on Wikimedia/pt-br
- Extensions included in Canasta/pt-br
- Extensions available as Debian packages/pt-br
- Extensions included in Fandom/pt-br
- Extensions included in Miraheze/pt-br
- Extensions included in MyWikis/pt-br
- Extensions included in ProWiki/pt-br
- Extensions included in ShoutWiki/pt-br
- Extensions included in Telepedia/pt-br
- Extensions included in wiki.gg/pt-br
- Extensions included in WikiForge/pt-br
- Spam management extensions/pt-br