Stop AI crawlers: Difference between revisions
Created page with "AI crawlers from all over the world have become a huge problem. They don't play by the (Robots.txt) rules, so it's even worse than old-school indexing by Bing, Google, and Yahoo which were bad enough. In his 2025 MediaWiki User and Developer Workshop presentation<ref>https://www.youtube.com/watch?v=VGS5l3YH2oY</ref> Jeffrey Wang mentions some approaches as inadequate: * Fail2ban * Nepenthes * Varnish and caching == Defenses before MediaWiki ==..." |
|||
| (10 intermediate revisions by the same user not shown) | |||
| Line 6: | Line 6: | ||
* Nepenthes | * Nepenthes | ||
* Varnish and caching | * Varnish and caching | ||
So, what ''can'' we do? | |||
== Defenses before MediaWiki == | == Defenses before MediaWiki == | ||
| Line 16: | Line 17: | ||
== Defenses in MediaWiki == | == Defenses in MediaWiki == | ||
really just the two in bold: | |||
* [[mediawikiwiki:Extension:Lockdown|Lockdown extension]] - suitable for other purposes in the category of "User Rights". For example, you can block certain swaths of URLs | * '''[[mediawikiwiki:Extension:Lockdown|Lockdown extension]]''' - most suitable for other purposes in the category of "User Rights". It '''is useful''' for disallowing anonymous reads of "heavy" pages. For example, you can block certain swaths of URLs in an entire namespace such as all Special pages - although you need to list each SpecialPage individually in your configuration (see example below). It is just not designed for complex filtering. | ||
* StopForumSpam - as the name suggests, suitable for preventing write access (not reads/views). | * StopForumSpam - as the name suggests, suitable for preventing write access (not reads/views). | ||
* [[mediawikiwiki:Extension:AbuseFilter|AbuseFilter extension]]- suitable for setting rules about content editing such as preventing links to specific domains, but not for traffic. | * [[mediawikiwiki:Extension:AbuseFilter|AbuseFilter extension]]- suitable for setting rules about content editing such as preventing links to specific domains, but not for traffic. | ||
* [[mediawikiwiki:Extension:CrawlerProtection|CrawlerProtection extension]]- by MyWikis' Jeffrey Wang. Currently has a | * '''[[mediawikiwiki:Extension:CrawlerProtection|CrawlerProtection extension]]'''- by MyWikis' Jeffrey Wang. Currently has [https://github.com/mywikis/CrawlerProtection/pull/10 a PR by vedmaka] that would enable a list of SpecialPages to deny anonymous access to. I submitted [https://github.com/mywikis/CrawlerProtection/pull/12 another PR] incorporating the suggestions therein. | ||
== Problematic pages in MediaWiki == | == Problematic pages in MediaWiki == | ||
| Line 38: | Line 40: | ||
== Discussion == | == Discussion == | ||
[[mw:Handling web crawlers]] | [[mw:Handling web crawlers|Handling web crawlers]] provides details on various solutions, like [[mediawikiwiki:Handling_web_crawlers#Lockdown|how to use Lockdown]] to at least prevent anonymous reads on heavy pages. | ||
== Solution == | == Solution == | ||
We | We tracked this work in [https://github.com/freephile/meza/issues/156 issue 156] | ||
Listing of all Special Pages on '''this''' wiki. We obtain the list by querying the API with | |||
<code>curl -s "[YOURWIKI]api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json" | jq -r '.query.specialpagealiases[].aliases[]' | sort</code> | |||
By querying your own API, you get SpecialPages that are added by the extensions unique to your wiki versus just MediaWiki core. | |||
=== Other ways to list SpecialPages via the API === | |||
<syntaxhighlight lang="bash"> | |||
# Get all aliases as a flat array | |||
curl -s "https://wiki.freephile.org/wiki/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json" | \ | |||
jq -r '.query.specialpagealiases[].aliases[]' | |||
# Get aliases grouped by special page (more useful) | |||
curl -s "https://wiki.freephile.org/wiki/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json" | \ | |||
jq '.query.specialpagealiases[] | {realname, aliases}' | |||
# Get a clean JSON array of just the alias strings | |||
curl -s "https://wiki.freephile.org/wiki/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json" | \ | |||
jq '[.query.specialpagealiases[].aliases[]]' | |||
# Get unique aliases (in case there are duplicates) | |||
curl -s "https://wiki.freephile.org/wiki/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json" | \ | |||
jq '[.query.specialpagealiases[].aliases[]] | unique' | |||
</syntaxhighlight> | |||
== Allow List of SpecialPages == | |||
Items marked with ✅ are suggested to be '''allowed for anonymous users''' rather than blocked. Since 2011 "Special:PasswordReset", "Special:UserLogin" and "Special:ChangePassword" are always allow-listed in core. Note: due to aliases, some entries may appear to be duplicate. See also: [[mediawikiwiki:Manual:$wgWhitelistRead|Manual:$wgWhitelistRead]] and [[mediawikiwiki:Extension:Whitelist_Pages|Extension:Whitelist Pages]] | |||
# AbuseFilter | |||
# AbuseLog | |||
# AccountSecurity | |||
# ActiveUsers | |||
# AddData | |||
# AddPage | |||
# AdminLinks | |||
# AllMessages | |||
# AllMyFiles | |||
# AllMyUploads | |||
# AllPages | |||
# AncientPages | |||
# ApiHelp | |||
# ApiSandbox | |||
# Ask | |||
# AuthenticationPopupSuccess | |||
# AutoblockList | |||
# BatchUpload | |||
# BetaFeatures | |||
# BlankPage | |||
# Block | |||
# BlockedExternalDomains | |||
# BlockIP | |||
# BlockList | |||
# BlockUser | |||
# Book | |||
# BookSources | |||
# BotPasswords | |||
# BrokenLinks | |||
# BrokenRedirects | |||
# ✅ Browse | |||
# BrowseData | |||
# Captcha | |||
# ✅ Categories | |||
# CategoryTree | |||
# ChangeContentModel | |||
# ChangeCredentials | |||
# ChangeEmail | |||
# ✅ ChangePassword | |||
# CheckUser | |||
# CheckUserLog | |||
# Cite | |||
# CiteThisPage | |||
# ClearPendingReviews | |||
# Collab_Pad | |||
# CollabPad | |||
# Collection | |||
# ComparePages | |||
# Concepts | |||
# ✅ ConfirmEmail | |||
# ConstraintErrorList | |||
# Contribs | |||
# Contribute | |||
# Contributions | |||
# ContributionScores | |||
# CreateAccount | |||
# CreateCategory | |||
# CreateClass | |||
# CreateForm | |||
# CreateProperty | |||
# CreateRedirect | |||
# CreateTemplate | |||
# DeadendPages | |||
# Delete | |||
# DeleteBatch | |||
# DeletedContributions | |||
# DeletePage | |||
# Diff | |||
# DisableOATHForUser | |||
# DiscussionToolsDebug | |||
# DisplayNotificationsConfiguration | |||
# DoubleRedirects | |||
# Edit | |||
# EditData | |||
# EditDiagram | |||
# EditPage | |||
# EditSchema | |||
# EditTags | |||
# EditWatchlist | |||
# Email | |||
# EmailUser | |||
# EnableFlow | |||
# EnableStructuredDiscussions | |||
# ExpandTemplates | |||
# Export | |||
# ExportRDF | |||
# FacetedSearch | |||
# FewestRevisions | |||
# FileDuplicateSearch | |||
# FileList | |||
# FilePath | |||
# FindComment | |||
# Flow | |||
# FormEdit | |||
# Forms | |||
# FormStart | |||
# Gadgets | |||
# GadgetUsage | |||
# GeneratePages | |||
# GetData | |||
# GoToComment | |||
# GoToInterwiki | |||
# GraphSandbox | |||
# History | |||
# History | |||
# ImageList | |||
# Import | |||
# ImportCSV | |||
# ImportSpreadsheet | |||
# ImportXML | |||
# Info | |||
# Interwiki | |||
# InvalidateEmail | |||
# Investigate | |||
# InvestigateBlock | |||
# IPBlockList | |||
# LinkAccounts | |||
# LinkSearch | |||
# LintErrors | |||
# ListAdmins | |||
# ListAutoblocks | |||
# ListBlocks | |||
# ListBots | |||
# ListDuplicatedFiles | |||
# ListFileDuplicates | |||
# ListFiles | |||
# ListGrants | |||
# ListGroupRights | |||
# ListRedirects | |||
# ListUsers | |||
# LockDB | |||
# Log | |||
# ✅ Login | |||
# Logout | |||
# Logs | |||
# LonelyPages | |||
# LongPages | |||
# MakeBot | |||
# MakeSysop | |||
# Manage_Two-factor_authentication | |||
# MathShowImage | |||
# MathStatus | |||
# MediaStatistics | |||
# MergeHistory | |||
# MIMESearch | |||
# MissingRedirectAnnotations | |||
# MobileDiff | |||
# MobileLanguages | |||
# MobileOptions | |||
# MostCategories | |||
# MostFiles | |||
# MostImages | |||
# MostInterwikis | |||
# MostLinked | |||
# MostLinkedCategories | |||
# MostLinkedFiles | |||
# MostLinkedPages | |||
# MostLinkedTemplates | |||
# MostRevisions | |||
# MostTranscludedPages | |||
# MostUsedCategories | |||
# MostUsedTemplates | |||
# MovePage | |||
# MultiPageEdit | |||
# MyContribs | |||
# MyContributions | |||
# MyFiles | |||
# MyLanguage | |||
# MyLog | |||
# MyPage | |||
# MyTalk | |||
# MyUploads | |||
# NamespaceInfo | |||
# NewFiles | |||
# NewImages | |||
# NewPages | |||
# Newsection | |||
# NewSection | |||
# Notifications | |||
# NotificationsMarkRead | |||
# Nuke | |||
# OATH | |||
# OATHAuth | |||
# OATH_Manage | |||
# OATHManage | |||
# OrphanedPages | |||
# Packages | |||
# PageData | |||
# PageHistory | |||
# PageInfo | |||
# PageProperty | |||
# Pagesbyprop | |||
# PagesByProp | |||
# PageStatistics | |||
# Pageswithprop | |||
# PagesWithProp | |||
# PasswordPolicies | |||
# ✅ PasswordReset | |||
# PendingReviews | |||
# PendingTaskList | |||
# PermaLink | |||
# PermanentLink | |||
# ✅ PluggableAuthLogin | |||
# PluggableAuthLogout | |||
# Preferences | |||
# ✅ PrefixIndex | |||
# ProcessingErrorList | |||
# Properties | |||
# PropertyLabelSimilarity | |||
# Protect | |||
# ProtectedPages | |||
# ProtectedTitles | |||
# ProtectPage | |||
# Purge | |||
# ✅ Random | |||
# RandomInCategory | |||
# ✅ RandomPage | |||
# RandomRedirect | |||
# RandomRootpage | |||
# RecentChanges | |||
# RecentChangesLinked | |||
# Redirect | |||
# RelatedChanges | |||
# RemoveCredentials | |||
# RenameUser | |||
# ReplaceText | |||
# ✅ ResetPass | |||
# ✅ ResetPassword | |||
# ResetTokens | |||
# RevisionDelete | |||
# RunJobs | |||
# RunQuery | |||
# ✅ Search | |||
# ✅ SearchByProperty | |||
# SemanticMediaWiki | |||
# ShortPages | |||
# SMWAdmin | |||
# ✅ SpecialPages | |||
# ✅ Statistics | |||
# ✅ Stats | |||
# StructuredDiscussions | |||
# Tags | |||
# TalkPage | |||
# Templates | |||
# Thanks | |||
# TopicSubscriptions | |||
# TrackingCategories | |||
# Two-factor_authentication | |||
# Types | |||
# Unblock | |||
# UncategorizedCategories | |||
# UncategorizedFiles | |||
# UncategorizedImages | |||
# UncategorizedPages | |||
# UncategorizedTemplates | |||
# Undelete | |||
# UnlinkAccounts | |||
# UnlockDB | |||
# UnusedCategories | |||
# UnusedFiles | |||
# UnusedImages | |||
# UnusedProperties | |||
# UnusedTemplates | |||
# UnwatchedPages | |||
# Upload | |||
# Uploads | |||
# UploadStash | |||
# UploadWindow | |||
# URIResolver | |||
# UserGroupRights | |||
# UserList | |||
# ✅ UserLogin | |||
# UserLogout | |||
# UserMerge | |||
# UserRights | |||
# Users | |||
# VerifyOATHForUser | |||
# ✅ Version | |||
# ViewXML | |||
# WantedCategories | |||
# WantedFiles | |||
# WantedPages | |||
# WantedProperties | |||
# WantedTemplates | |||
# WatchAnalytics | |||
# Watchlist | |||
# WebChat | |||
# WhatLinksHere | |||
# WhoIsWatching | |||
# WithoutInterwiki | |||
You can configure the '''[[mw:Extension:CrawlerProtection|CrawlerProtection]]''' extension to block anonymous read of SpecialPages as you see fit. | |||
{{Collapsible | |||
|visible_text=You can achieve this restriction using the Lockdown extension with this configuration: | |||
|collapsed_content= | |||
<pre> | |||
$wgSpecialPageLockdown['AbuseFilter'] = ['user']; | |||
$wgSpecialPageLockdown['AbuseLog'] = ['user']; | |||
$wgSpecialPageLockdown['AccountSecurity'] = ['user']; | |||
$wgSpecialPageLockdown['ActiveUsers'] = ['user']; | |||
$wgSpecialPageLockdown['AddData'] = ['user']; | |||
$wgSpecialPageLockdown['AddPage'] = ['user']; | |||
$wgSpecialPageLockdown['AdminLinks'] = ['user']; | |||
$wgSpecialPageLockdown['AllMessages'] = ['user']; | |||
$wgSpecialPageLockdown['AllMyFiles'] = ['user']; | |||
$wgSpecialPageLockdown['AllMyUploads'] = ['user']; | |||
$wgSpecialPageLockdown['AllPages'] = ['user']; | |||
$wgSpecialPageLockdown['AncientPages'] = ['user']; | |||
$wgSpecialPageLockdown['ApiHelp'] = ['user']; | |||
$wgSpecialPageLockdown['ApiSandbox'] = ['user']; | |||
$wgSpecialPageLockdown['Ask'] = ['user']; | |||
$wgSpecialPageLockdown['AuthenticationPopupSuccess'] = ['user']; | |||
$wgSpecialPageLockdown['AutoblockList'] = ['user']; | |||
$wgSpecialPageLockdown['BatchUpload'] = ['user']; | |||
$wgSpecialPageLockdown['BetaFeatures'] = ['user']; | |||
$wgSpecialPageLockdown['BlankPage'] = ['user']; | |||
$wgSpecialPageLockdown['Block'] = ['user']; | |||
$wgSpecialPageLockdown['BlockedExternalDomains'] = ['user']; | |||
$wgSpecialPageLockdown['BlockIP'] = ['user']; | |||
$wgSpecialPageLockdown['BlockList'] = ['user']; | |||
$wgSpecialPageLockdown['BlockUser'] = ['user']; | |||
$wgSpecialPageLockdown['Book'] = ['user']; | |||
$wgSpecialPageLockdown['BookSources'] = ['user']; | |||
$wgSpecialPageLockdown['BotPasswords'] = ['user']; | |||
$wgSpecialPageLockdown['BrokenLinks'] = ['user']; | |||
$wgSpecialPageLockdown['BrokenRedirects'] = ['user']; | |||
$wgSpecialPageLockdown['BrowseData'] = ['user']; | |||
$wgSpecialPageLockdown['Captcha'] = ['user']; | |||
$wgSpecialPageLockdown['CategoryTree'] = ['user']; | |||
$wgSpecialPageLockdown['ChangeContentModel'] = ['user']; | |||
$wgSpecialPageLockdown['ChangeCredentials'] = ['user']; | |||
$wgSpecialPageLockdown['ChangeEmail'] = ['user']; | |||
$wgSpecialPageLockdown['ChangePassword'] = ['user']; | |||
$wgSpecialPageLockdown['CheckUser'] = ['user']; | |||
$wgSpecialPageLockdown['CheckUserLog'] = ['user']; | |||
$wgSpecialPageLockdown['Cite'] = ['user']; | |||
$wgSpecialPageLockdown['CiteThisPage'] = ['user']; | |||
$wgSpecialPageLockdown['ClearPendingReviews'] = ['user']; | |||
$wgSpecialPageLockdown['Collab_Pad'] = ['user']; | |||
$wgSpecialPageLockdown['CollabPad'] = ['user']; | |||
$wgSpecialPageLockdown['Collection'] = ['user']; | |||
$wgSpecialPageLockdown['ComparePages'] = ['user']; | |||
$wgSpecialPageLockdown['Concepts'] = ['user']; | |||
$wgSpecialPageLockdown['ConstraintErrorList'] = ['user']; | |||
$wgSpecialPageLockdown['Contribs'] = ['user']; | |||
$wgSpecialPageLockdown['Contribute'] = ['user']; | |||
$wgSpecialPageLockdown['Contributions'] = ['user']; | |||
$wgSpecialPageLockdown['ContributionScores'] = ['user']; | |||
$wgSpecialPageLockdown['CreateAccount'] = ['user']; | |||
$wgSpecialPageLockdown['CreateCategory'] = ['user']; | |||
$wgSpecialPageLockdown['CreateClass'] = ['user']; | |||
$wgSpecialPageLockdown['CreateForm'] = ['user']; | |||
$wgSpecialPageLockdown['CreateProperty'] = ['user']; | |||
$wgSpecialPageLockdown['CreateRedirect'] = ['user']; | |||
$wgSpecialPageLockdown['CreateTemplate'] = ['user']; | |||
$wgSpecialPageLockdown['DeadendPages'] = ['user']; | |||
$wgSpecialPageLockdown['Delete'] = ['user']; | |||
$wgSpecialPageLockdown['DeleteBatch'] = ['user']; | |||
$wgSpecialPageLockdown['DeletedContributions'] = ['user']; | |||
$wgSpecialPageLockdown['DeletePage'] = ['user']; | |||
$wgSpecialPageLockdown['Diff'] = ['user']; | |||
$wgSpecialPageLockdown['DisableOATHForUser'] = ['user']; | |||
$wgSpecialPageLockdown['DiscussionToolsDebug'] = ['user']; | |||
$wgSpecialPageLockdown['DisplayNotificationsConfiguration'] = ['user']; | |||
$wgSpecialPageLockdown['DoubleRedirects'] = ['user']; | |||
$wgSpecialPageLockdown['Edit'] = ['user']; | |||
$wgSpecialPageLockdown['EditData'] = ['user']; | |||
$wgSpecialPageLockdown['EditDiagram'] = ['user']; | |||
$wgSpecialPageLockdown['EditPage'] = ['user']; | |||
$wgSpecialPageLockdown['EditSchema'] = ['user']; | |||
$wgSpecialPageLockdown['EditTags'] = ['user']; | |||
$wgSpecialPageLockdown['EditWatchlist'] = ['user']; | |||
$wgSpecialPageLockdown['Email'] = ['user']; | |||
$wgSpecialPageLockdown['EmailUser'] = ['user']; | |||
$wgSpecialPageLockdown['EnableFlow'] = ['user']; | |||
$wgSpecialPageLockdown['EnableStructuredDiscussions'] = ['user']; | |||
$wgSpecialPageLockdown['ExpandTemplates'] = ['user']; | |||
$wgSpecialPageLockdown['Export'] = ['user']; | |||
$wgSpecialPageLockdown['ExportRDF'] = ['user']; | |||
$wgSpecialPageLockdown['FacetedSearch'] = ['user']; | |||
$wgSpecialPageLockdown['FewestRevisions'] = ['user']; | |||
$wgSpecialPageLockdown['FileDuplicateSearch'] = ['user']; | |||
$wgSpecialPageLockdown['FileList'] = ['user']; | |||
$wgSpecialPageLockdown['FilePath'] = ['user']; | |||
$wgSpecialPageLockdown['FindComment'] = ['user']; | |||
$wgSpecialPageLockdown['Flow'] = ['user']; | |||
$wgSpecialPageLockdown['FormEdit'] = ['user']; | |||
$wgSpecialPageLockdown['Forms'] = ['user']; | |||
$wgSpecialPageLockdown['FormStart'] = ['user']; | |||
$wgSpecialPageLockdown['Gadgets'] = ['user']; | |||
$wgSpecialPageLockdown['GadgetUsage'] = ['user']; | |||
$wgSpecialPageLockdown['GeneratePages'] = ['user']; | |||
$wgSpecialPageLockdown['GetData'] = ['user']; | |||
$wgSpecialPageLockdown['GoToComment'] = ['user']; | |||
$wgSpecialPageLockdown['GoToInterwiki'] = ['user']; | |||
$wgSpecialPageLockdown['GraphSandbox'] = ['user']; | |||
$wgSpecialPageLockdown['History'] = ['user']; | |||
$wgSpecialPageLockdown['History'] = ['user']; | |||
$wgSpecialPageLockdown['ImageList'] = ['user']; | |||
$wgSpecialPageLockdown['Import'] = ['user']; | |||
$wgSpecialPageLockdown['ImportCSV'] = ['user']; | |||
$wgSpecialPageLockdown['ImportSpreadsheet'] = ['user']; | |||
$wgSpecialPageLockdown['ImportXML'] = ['user']; | |||
$wgSpecialPageLockdown['Info'] = ['user']; | |||
$wgSpecialPageLockdown['Interwiki'] = ['user']; | |||
$wgSpecialPageLockdown['InvalidateEmail'] = ['user']; | |||
$wgSpecialPageLockdown['Investigate'] = ['user']; | |||
$wgSpecialPageLockdown['InvestigateBlock'] = ['user']; | |||
$wgSpecialPageLockdown['IPBlockList'] = ['user']; | |||
$wgSpecialPageLockdown['LinkAccounts'] = ['user']; | |||
$wgSpecialPageLockdown['LinkSearch'] = ['user']; | |||
$wgSpecialPageLockdown['LintErrors'] = ['user']; | |||
$wgSpecialPageLockdown['ListAdmins'] = ['user']; | |||
$wgSpecialPageLockdown['ListAutoblocks'] = ['user']; | |||
$wgSpecialPageLockdown['ListBlocks'] = ['user']; | |||
$wgSpecialPageLockdown['ListBots'] = ['user']; | |||
$wgSpecialPageLockdown['ListDuplicatedFiles'] = ['user']; | |||
$wgSpecialPageLockdown['ListFileDuplicates'] = ['user']; | |||
$wgSpecialPageLockdown['ListFiles'] = ['user']; | |||
$wgSpecialPageLockdown['ListGrants'] = ['user']; | |||
$wgSpecialPageLockdown['ListGroupRights'] = ['user']; | |||
$wgSpecialPageLockdown['ListRedirects'] = ['user']; | |||
$wgSpecialPageLockdown['ListUsers'] = ['user']; | |||
$wgSpecialPageLockdown['LockDB'] = ['user']; | |||
$wgSpecialPageLockdown['Log'] = ['user']; | |||
$wgSpecialPageLockdown['Logout'] = ['user']; | |||
$wgSpecialPageLockdown['Logs'] = ['user']; | |||
$wgSpecialPageLockdown['LonelyPages'] = ['user']; | |||
$wgSpecialPageLockdown['LongPages'] = ['user']; | |||
$wgSpecialPageLockdown['MakeBot'] = ['user']; | |||
$wgSpecialPageLockdown['MakeSysop'] = ['user']; | |||
$wgSpecialPageLockdown['Manage_Two-factor_authentication'] = ['user']; | |||
$wgSpecialPageLockdown['MathShowImage'] = ['user']; | |||
$wgSpecialPageLockdown['MathStatus'] = ['user']; | |||
$wgSpecialPageLockdown['MediaStatistics'] = ['user']; | |||
$wgSpecialPageLockdown['MergeHistory'] = ['user']; | |||
$wgSpecialPageLockdown['MIMESearch'] = ['user']; | |||
$wgSpecialPageLockdown['MissingRedirectAnnotations'] = ['user']; | |||
$wgSpecialPageLockdown['MobileDiff'] = ['user']; | |||
$wgSpecialPageLockdown['MobileLanguages'] = ['user']; | |||
$wgSpecialPageLockdown['MobileOptions'] = ['user']; | |||
$wgSpecialPageLockdown['MostCategories'] = ['user']; | |||
$wgSpecialPageLockdown['MostFiles'] = ['user']; | |||
$wgSpecialPageLockdown['MostImages'] = ['user']; | |||
$wgSpecialPageLockdown['MostInterwikis'] = ['user']; | |||
$wgSpecialPageLockdown['MostLinked'] = ['user']; | |||
$wgSpecialPageLockdown['MostLinkedCategories'] = ['user']; | |||
$wgSpecialPageLockdown['MostLinkedFiles'] = ['user']; | |||
$wgSpecialPageLockdown['MostLinkedPages'] = ['user']; | |||
$wgSpecialPageLockdown['MostLinkedTemplates'] = ['user']; | |||
$wgSpecialPageLockdown['MostRevisions'] = ['user']; | |||
$wgSpecialPageLockdown['MostTranscludedPages'] = ['user']; | |||
$wgSpecialPageLockdown['MostUsedCategories'] = ['user']; | |||
$wgSpecialPageLockdown['MostUsedTemplates'] = ['user']; | |||
$wgSpecialPageLockdown['MovePage'] = ['user']; | |||
$wgSpecialPageLockdown['MultiPageEdit'] = ['user']; | |||
$wgSpecialPageLockdown['MyContribs'] = ['user']; | |||
$wgSpecialPageLockdown['MyContributions'] = ['user']; | |||
$wgSpecialPageLockdown['MyFiles'] = ['user']; | |||
$wgSpecialPageLockdown['MyLanguage'] = ['user']; | |||
$wgSpecialPageLockdown['MyLog'] = ['user']; | |||
$wgSpecialPageLockdown['MyPage'] = ['user']; | |||
$wgSpecialPageLockdown['MyTalk'] = ['user']; | |||
$wgSpecialPageLockdown['MyUploads'] = ['user']; | |||
$wgSpecialPageLockdown['NamespaceInfo'] = ['user']; | |||
$wgSpecialPageLockdown['NewFiles'] = ['user']; | |||
$wgSpecialPageLockdown['NewImages'] = ['user']; | |||
$wgSpecialPageLockdown['NewPages'] = ['user']; | |||
$wgSpecialPageLockdown['Newsection'] = ['user']; | |||
$wgSpecialPageLockdown['NewSection'] = ['user']; | |||
$wgSpecialPageLockdown['Notifications'] = ['user']; | |||
$wgSpecialPageLockdown['NotificationsMarkRead'] = ['user']; | |||
$wgSpecialPageLockdown['Nuke'] = ['user']; | |||
$wgSpecialPageLockdown['OATH'] = ['user']; | |||
$wgSpecialPageLockdown['OATHAuth'] = ['user']; | |||
$wgSpecialPageLockdown['OATH_Manage'] = ['user']; | |||
$wgSpecialPageLockdown['OATHManage'] = ['user']; | |||
$wgSpecialPageLockdown['OrphanedPages'] = ['user']; | |||
$wgSpecialPageLockdown['Packages'] = ['user']; | |||
$wgSpecialPageLockdown['PageData'] = ['user']; | |||
$wgSpecialPageLockdown['PageHistory'] = ['user']; | |||
$wgSpecialPageLockdown['PageInfo'] = ['user']; | |||
$wgSpecialPageLockdown['PageProperty'] = ['user']; | |||
$wgSpecialPageLockdown['Pagesbyprop'] = ['user']; | |||
$wgSpecialPageLockdown['PagesByProp'] = ['user']; | |||
$wgSpecialPageLockdown['PageStatistics'] = ['user']; | |||
$wgSpecialPageLockdown['Pageswithprop'] = ['user']; | |||
$wgSpecialPageLockdown['PagesWithProp'] = ['user']; | |||
$wgSpecialPageLockdown['PasswordPolicies'] = ['user']; | |||
$wgSpecialPageLockdown['PendingReviews'] = ['user']; | |||
$wgSpecialPageLockdown['PendingTaskList'] = ['user']; | |||
$wgSpecialPageLockdown['PermaLink'] = ['user']; | |||
$wgSpecialPageLockdown['PermanentLink'] = ['user']; | |||
$wgSpecialPageLockdown['PluggableAuthLogout'] = ['user']; | |||
$wgSpecialPageLockdown['Preferences'] = ['user']; | |||
$wgSpecialPageLockdown['ProcessingErrorList'] = ['user']; | |||
$wgSpecialPageLockdown['Properties'] = ['user']; | |||
$wgSpecialPageLockdown['PropertyLabelSimilarity'] = ['user']; | |||
$wgSpecialPageLockdown['Protect'] = ['user']; | |||
$wgSpecialPageLockdown['ProtectedPages'] = ['user']; | |||
$wgSpecialPageLockdown['ProtectedTitles'] = ['user']; | |||
$wgSpecialPageLockdown['ProtectPage'] = ['user']; | |||
$wgSpecialPageLockdown['Purge'] = ['user']; | |||
$wgSpecialPageLockdown['RandomInCategory'] = ['user']; | |||
$wgSpecialPageLockdown['RandomRedirect'] = ['user']; | |||
$wgSpecialPageLockdown['RandomRootpage'] = ['user']; | |||
$wgSpecialPageLockdown['RecentChanges'] = ['user']; | |||
$wgSpecialPageLockdown['RecentChangesLinked'] = ['user']; | |||
$wgSpecialPageLockdown['Redirect'] = ['user']; | |||
$wgSpecialPageLockdown['RelatedChanges'] = ['user']; | |||
$wgSpecialPageLockdown['RemoveCredentials'] = ['user']; | |||
$wgSpecialPageLockdown['RenameUser'] = ['user']; | |||
$wgSpecialPageLockdown['ReplaceText'] = ['user']; | |||
$wgSpecialPageLockdown['ResetTokens'] = ['user']; | |||
$wgSpecialPageLockdown['RevisionDelete'] = ['user']; | |||
$wgSpecialPageLockdown['RunJobs'] = ['user']; | |||
$wgSpecialPageLockdown['RunQuery'] = ['user']; | |||
$wgSpecialPageLockdown['SemanticMediaWiki'] = ['user']; | |||
$wgSpecialPageLockdown['ShortPages'] = ['user']; | |||
$wgSpecialPageLockdown['SMWAdmin'] = ['user']; | |||
$wgSpecialPageLockdown['StructuredDiscussions'] = ['user']; | |||
$wgSpecialPageLockdown['Tags'] = ['user']; | |||
$wgSpecialPageLockdown['TalkPage'] = ['user']; | |||
$wgSpecialPageLockdown['Templates'] = ['user']; | |||
$wgSpecialPageLockdown['Thanks'] = ['user']; | |||
$wgSpecialPageLockdown['TopicSubscriptions'] = ['user']; | |||
$wgSpecialPageLockdown['TrackingCategories'] = ['user']; | |||
$wgSpecialPageLockdown['Two-factor_authentication'] = ['user']; | |||
$wgSpecialPageLockdown['Types'] = ['user']; | |||
$wgSpecialPageLockdown['Unblock'] = ['user']; | |||
$wgSpecialPageLockdown['UncategorizedCategories'] = ['user']; | |||
$wgSpecialPageLockdown['UncategorizedFiles'] = ['user']; | |||
$wgSpecialPageLockdown['UncategorizedImages'] = ['user']; | |||
$wgSpecialPageLockdown['UncategorizedPages'] = ['user']; | |||
$wgSpecialPageLockdown['UncategorizedTemplates'] = ['user']; | |||
$wgSpecialPageLockdown['Undelete'] = ['user']; | |||
$wgSpecialPageLockdown['UnlinkAccounts'] = ['user']; | |||
$wgSpecialPageLockdown['UnlockDB'] = ['user']; | |||
$wgSpecialPageLockdown['UnusedCategories'] = ['user']; | |||
$wgSpecialPageLockdown['UnusedFiles'] = ['user']; | |||
$wgSpecialPageLockdown['UnusedImages'] = ['user']; | |||
$wgSpecialPageLockdown['UnusedProperties'] = ['user']; | |||
$wgSpecialPageLockdown['UnusedTemplates'] = ['user']; | |||
$wgSpecialPageLockdown['UnwatchedPages'] = ['user']; | |||
$wgSpecialPageLockdown['Upload'] = ['user']; | |||
$wgSpecialPageLockdown['Uploads'] = ['user']; | |||
$wgSpecialPageLockdown['UploadStash'] = ['user']; | |||
$wgSpecialPageLockdown['UploadWindow'] = ['user']; | |||
$wgSpecialPageLockdown['URIResolver'] = ['user']; | |||
$wgSpecialPageLockdown['UserGroupRights'] = ['user']; | |||
$wgSpecialPageLockdown['UserList'] = ['user']; | |||
$wgSpecialPageLockdown['UserLogout'] = ['user']; | |||
$wgSpecialPageLockdown['UserMerge'] = ['user']; | |||
$wgSpecialPageLockdown['UserRights'] = ['user']; | |||
$wgSpecialPageLockdown['Users'] = ['user']; | |||
$wgSpecialPageLockdown['VerifyOATHForUser'] = ['user']; | |||
$wgSpecialPageLockdown['ViewXML'] = ['user']; | |||
$wgSpecialPageLockdown['WantedCategories'] = ['user']; | |||
$wgSpecialPageLockdown['WantedFiles'] = ['user']; | |||
$wgSpecialPageLockdown['WantedPages'] = ['user']; | |||
$wgSpecialPageLockdown['WantedProperties'] = ['user']; | |||
$wgSpecialPageLockdown['WantedTemplates'] = ['user']; | |||
$wgSpecialPageLockdown['WatchAnalytics'] = ['user']; | |||
$wgSpecialPageLockdown['Watchlist'] = ['user']; | |||
$wgSpecialPageLockdown['WebChat'] = ['user']; | |||
$wgSpecialPageLockdown['WhatLinksHere'] = ['user']; | |||
$wgSpecialPageLockdown['WhoIsWatching'] = ['user']; | |||
$wgSpecialPageLockdown['WithoutInterwiki'] = ['user']; | |||
</pre> | |||
}} | |||
{{References}} | |||
[[Category:MediaWiki]] | |||
[[Category:Security]] | |||
[[Category:DevOps]] | |||
[[Category:AI]] | |||