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 |
branches de lançamento |
MediaWiki | 1.33+ |
PHP | 5.4+ recomendado |
Modifica o banco de dados |
Sim |
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 | |
|
|
|
|
|
|
|
|
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/
. - 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.
Para usuários executando o MediaWiki 1.26 ou anteriores:
As instruções acima descrevem a nova forma de instalar essa extensão utilizando wfLoadExtension()
.
Se precisar instalar essa extensão em versões antigas (MediaWiki 1.26 e anteriores), em vez de wfLoadExtension( 'AbuseFilter' );
, você precisa usar:
require_once "$IP/extensions/AbuseFilter/AbuseFilter.php";
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 |
---|---|
abusefilter-modify | Criar ou modificar filtros de abuso |
abusefilter-view | Ver filtros de abusos |
abusefilter-log | Ver o registro de abusos |
abusefilter-log-detail | Ver entradas detalhadas do registro de abusos |
abusefilter-privatedetails | Ver dados privados no registro de abusos |
abusefilter-modify-restricted | Modificar filtros de abusos com ações restritas |
abusefilter-modify-global | Criar ou modificar filtros de abuso global |
abusefilter-revert | Reverter todas as modificações feitas por um dado filtro de abusos |
abusefilter-view-private | Ver filtros de abuso marcados como privados |
abusefilter-log-private | Ver registro de entrada do fitro de abusos marcados como privados |
abusefilter-hide-log | Ocultar entradas do filtro de abusos |
abusefilter-hidden-log | Ver entradas ocultadas do registro de abusos |
abusefilter-privatedetails-log | Veja o registro de acesso de detalhes privados no Filtro de abuso |
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;
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' => true,
'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 $wgAbuseFilterRestrictions 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
]
|
Desativar um filtro se corresponder a mais de 2 edições, constituindo mais de 5 % das ações que foram verificadas contra o grupo do filtro no período "observado" (no máximo um dia), a menos que o filtro tenha sido alterado nos últimos 86400 segundos (um dia) Veja estrangulamento de emergência. |
$wgAbuseFilterEmergencyDisableCount
|
[
'default' => 2
]
| |
$wgAbuseFilterEmergencyDisableAge
|
[
'default' => 86400
]
| |
$wgAbuseFilterParserClass
|
'AbuseFilterParser'
|
Nome da classe do analisador do AbuseFilter. |
$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 |
$wgAbuseFilterNotificationsPrivate
|
false
|
Habilitar notificações para filtros privados. |
$wgAbuseFilterCentralDB
|
null
|
Nome de um banco de dados onde os filtros de abuso globais serão armazenados (apenas suportado na última versão de desenvolvimento). |
$wgAbuseFilterIsCentral
|
false
|
Defina esta variável como true para a wiki onde AbuseFilters globais são armazenados (suportado apenas na última versão em desenvolvimento). |
$wgAbuseFilterLocallyDisabledGlobalActions
|
[
"throttle" => false,
"warn" => false,
"disallow" => false,
"blockautopromote" => false,
"block" => false,
"rangeblock" => false,
"degroup" => false,
"tag" => false
]
|
Não permitir filtros centralizados de tomarem ações que bloqueiam localmente, remover de grupos ou revogar permissões. |
$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.
|
$wgAbuseFilterCustomActionsHandlers
|
[ ]
|
Funções callback para ações customizadas. |
$wgAbuseFilterDefaultWarningMessage
|
[
'default' => 'abusefilter-warning'
]
|
Mensagens de aviso padrão, por filtro de grupo |
$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. |
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.$wgAbuseFilterProfileActionsCap
- Número máximo de ações recentes para contar em relação a esse limite. Observe que cada ação incrementa um contador e, quando esse contador atinge esse valor configurado, esse contador e o número de ações recentes que correspondem a todos os filtros são zerados.
Os filtros suprimidos podem ser identificados na lista de filtros (Especial:AbuseFilter) com o estado Ativo, limitado. A supressão ocorre silenciosamente e não há como saber quando um filtro foi suprimido.
Quando um filtro é suprimido, ele não executa nenhuma ação perigosa (as especificadas em $wgAbuseFilterRestrictions
) e apenas ações "seguras" são permitidas.
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.
Os filtros também podem ser aleatoriamente suprimidos se a contagem de ações atingir $wgAbuseFilterProfileActionsCap
, fazendo com que a contagem de todas as correspondências dos filtros sejam redefinidas para 0, e então alguém repetidamente faz um filtro atingir esse limiar.
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
Lista filtros de abuso não-privados
Resultado |
---|
<api>
<query>
<abusefilters>
<filter id="1" hits="867" />
<filter id="3" hits="66110" />
<filter id="5" hits="464" />
<filter id="6" hits="19" />
<filter id="8" hits="7" />
<filter id="9" hits="24869" />
<filter id="11" hits="10033" />
<filter id="14" hits="63" />
<filter id="15" hits="15" />
<filter id="16" hits="44" />
</abusefilters>
</query>
<query-continue>
<abusefilters abfstartid="18" />
</query-continue>
</api>
|
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
Lista de casos em que o filtro de abuso foi desencadeado em resposta às ações do usuário "SineBot"
Resultado |
---|
<api>
<query>
<abuselog>
<item id="900937" filter_id="211" user="SineBot" result="" />
<item id="888404" filter_id="211" user="SineBot" result="" />
<item id="862751" filter_id="211" user="SineBot" result="" />
<item id="855649" filter_id="211" user="SineBot" result="" />
<item id="842429" filter_id="211" user="SineBot" result="" />
<item id="840958" filter_id="1" user="SineBot" result="" />
<item id="824151" filter_id="211" user="SineBot" result="" />
<item id="804892" filter_id="211" user="SineBot" result="" />
<item id="205254" filter_id="58" user="SineBot" result="disallow" />
<item id="205252" filter_id="58" user="SineBot" result="disallow" />
</abuselog>
</query>
<query-continue>
<abuselog aflstart="2009-04-19T02:07:55Z" />
</query-continue>
</api>
|
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. If the Wiki is using SSL certificates, this error could possibly be because of the
$wgServer
value, which might be using "http://" instead of "https://". An indication of this error will be, the browser giving https warning for Special:AbuseFilter pages. (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
It is possible to add new variables, to be used in abuse filters. A list of examples is available . To do that, you should:
- Adicione um manipulador para o gancho AbuseFilter-builder . To add a variable, you should use
$builder['vars']['variable_name'] = 'i18n-key';
, wherevariable_name
is the name of the variable, andi18n-key
is the fragment of an i18n key. A chave completa seráabusefilter-edit-builder-vars-{$your_key}
. - Adicione as mensagens i18n que você escolheu no ponto anterior.
- Choose a hook handler where the variable will be computed. Depending on your use case, you could:
- Implement the AbuseFilter-generateTitleVars hook; this is specifically thought for page-related variables;
- Implement the AbuseFilter-generateUserVars hook; this is specifically thought for user-related variables;
- Implement the AbuseFilter-generateGenericVars hook; this is for variables not bound to a specific page or user;
- Implement the AbuseFilterAlterVariables hook; this is a bit more flexible than the other hooks, but it has a downside: your variable will not be available when examining past RecentChanges entries. If you want to implement that feature (and it's recommended to do so), you should use one of the hooks listed above, and use its third parameter (
$RCRow
).
- Inside the hook handler, there are two ways to add a variable:
- The "direct" way is calling
$vars->setVar( 'var_name', var_value );
. This is ideal only when the value is easy and quick to compute: the value is computed even if no active filter will use it. - The "lazy" way is calling
$vars->setLazyLoadVar( 'var_name', 'method_name', $params );
. Here, 'method_name' is a (unique) identifier that will be used to compute the variable (it's recommended to prefix it with the name of your extension). To register the method, you should add a handler for the AbuseFilter-computeVariable hook; therein, you should check if the $method passed matches your 'method_name', and if so, compute the variable. Lastly, $params is an array of parameters that you'll need to compute the variable; these are passed to the computeVariable hook handler. For an example of this, you can check out CentralAuth'sglobal_user_groups
.
- The "direct" way is calling
Adding custom actions
You can add custom action handlers, so that each filter may perform further actions. To do that, you choose a name for the action ('my-action' from now on), and then:
- Create a class named e.g. MyAction, that should extend \MediaWiki\Extension\AbuseFilter\Consequence, which can also implement HookAborterConsequence or ConsequencesDisablerConsequence
- Add a subscriber to the AbuseFilterCustomActions hook; the subscriber should provide a callback as documented in the hook documentation, that returns an instance of the class created above, for instance:
class MyConsequence 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 MyConsequence( $params, $rawParams );
};
}
Then you should add the following i18n messages; you can replace 'my_action' with e.g. 'block' to see what the messages are for:
'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. Note that, at the moment, each filter can only be in a single group (T116642). Currently, the only known consumer of this feature is 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 usado por um ou mais projetos da Wikimedia. Isto significa que, provavelmente, a extensão é estável e funciona bem o suficiente para ser utilizada em sites 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. |
- Stable extensions/pt-br
- User activity extensions/pt-br
- Special page extensions/pt-br
- API extensions/pt-br
- GPL licensed extensions/pt-br
- Extensions in Wikimedia version control/pt-br
- ArticleDelete extensions/pt-br
- BeforeCreateEchoEvent extensions/pt-br
- ChangeTagsListActive extensions/pt-br
- ContributionsToolLinks extensions/pt-br
- EditFilterMergedContent extensions/pt-br
- GetAutoPromoteGroups extensions/pt-br
- HistoryPageToolLinks extensions/pt-br
- ListDefinedTags extensions/pt-br
- LoadExtensionSchemaUpdates extensions/pt-br
- PageSaveComplete extensions/pt-br
- ParserOutputStashForEdit extensions/pt-br
- RecentChange save extensions/pt-br
- RenameUserSQL extensions/pt-br
- TitleMove extensions/pt-br
- UndeletePageToolLinks extensions/pt-br
- UnitTestsAfterDatabaseSetup extensions/pt-br
- UnitTestsBeforeDatabaseTeardown extensions/pt-br
- UploadStashFile extensions/pt-br
- UploadVerifyUpload extensions/pt-br
- UserMergeAccountFields extensions/pt-br
- All extensions/pt-br
- Extensions requiring Composer with git/pt-br
- Extensions used on Wikimedia/pt-br
- Spam management extensions/pt-br