Manual:Preventing access

For help customizing user rights, see Manual:User rights. This page contains examples useful for restricting access.

Most of the examples need changes to LocalSettings.php. Any snippets of code with no accompanying instructions must be added to that file to take effect. To add one or more lines to the file, follow these steps:


 * 1) If there is a   at the end of the file, remove it.  It's not necessary and just gets in the way.
 * 2) Add the line to the bottom of a file, using a text editor.  It doesn't matter if there are some blank lines around it.  Do not use Windows Notepad, which may add a "Byte Order Mark" (BOM) and muck up the file. Typical symptoms of BOMs include white pages and errors about headers already being sent. To remove a BOM, you'll have to edit the file in a hex editor. Windows WordPad seems to work fine.  Removal of BOMs can also be accomplished using the Vim text editor by opening the file in VIM, typing :set nobomb, and resaving the file.

Simple private wiki
For the common use case of "a private wiki, for oneself and approved others", you need to: See the warnings in the sections below; this is simple "general use" code, and may or may not match your requirements.
 * Consider whether MediaWiki is right for you. MediaWiki was not originally designed for private wikis, so other software may be more suitable. See Comparison of wiki software, List of content management systems, and opensourcecms.com for an overview.
 * Restrict viewing
 * Restrict editing
 * Restrict account creation

Restrict account creation
To restrict account creation, you need to edit LocalSettings.php in the root path of your MediaWiki installation.

You can use the ConfirmAccount extension if you want to set up an account confirmation queue. (If not you may still proceed as follows.)

New users will still be able to be created by sysops, in the following manner:


 * 1) Go to Special:Userlogin, when logged in as a sysop.
 * 2) Click on "Create an account" link to get to the account creation form.
 * 3) Enter a username and an email address, and click the "by email" button. Note you need $wgEnableEmail=true or else the sysop must pick a password and send it to the user.
 * 4) The account will be created with a random password which is then emailed to the given address (as with the "forgot password" feature). The user will be requested to change password at first login; when he does this, his e-mail address will also be marked as confirmed.
 * When you click the "create account" button instead, you have to manually send the user his password. If you've set $wgMinimalPasswordLength=0 (default configuration up to version 1.15) and you've left the password field blank, the user will be emailed an e-mail address confirmation request but will be unable to access Special:Confirmemail to perform the confirmation. Instead, he'll get an error (unless you've added it to $wgWhitelistRead); he'll be able to login with a blank password and then confirm email, but his password will not have been reset (he'll have to reset it manually).

It may be appropriate to edit the text displayed when a non-user attempts to log in. This can be done at MediaWiki:Nosuchuser, when logged in as a sysop. Use plain text without any special formatting, as the formatting is ignored and the text is literally rendered.

To prevent even sysops from creating accounts:

Restrict editing of all pages
Users will still be able to read pages with these modifications, and they can view the source by using Special:Export/Article name or other methods (see also bug 1859).

See Help:User rights and Manual:$wgGroupPermissions. Some examples of how to protect all pages from editing (not reading) by certain classes of users:

Pre-1.10
This functionality is not available before 1.10 in the core software. You will have to use a hack, such as meta:User:PyneJ/Hacks/PageWhiteList.

1.10 upwards
In MediaWiki 1.10, it is possible to protect entire namespaces using the $wgNamespaceProtection variable. Examples: Note that in the last case it's assumed that a custom namespace exists and that  is a defined constant equal to the namespace number. See Manual:Using custom namespaces.

Restrict editing of certain specific pages
Use the Protect feature. By default, any sysop can protect pages so only other sysops can edit them. In 1.9 and higher, by default they can also protect pages so only "autoconfirmed" users (with accounts older than a configured period) can edit them. This does not require editing configuration files.

If you want to restrict editing to groups with specific permissions, edit $wgRestrictionLevels. To prevent actions other than edit and move, use $wgRestrictionTypes.

Restrict editing of all but a few pages
To impose a blanket restriction on editing for all pages, but allow a few (such as sandboxes, join request pages, etc.) to be more generously editable, you can use the EditSubpages extension. This may not fit too often, but you could also use the Restrict editing of parts of certain specific pages method mentioned above, with all name spaces protected, and only a special one editable by everyone which has all the pages you want editable.

Restrict editing for certain IP ranges
Schools and other institutions may want to block all edits not from a few specified IP address ranges. To do so, see block. The only way to do this at present without modifying the code is to go to Special:Blockip and systematically block every one of the 65,536 CIDR Class B ranges that you don't want to be able to edit. This will work for all future versions of MediaWiki. It will not work on a per-namespace basis.

Alternatively, it would be possible to hack the code to get it to do this more seamlessly, but that may or may not work indefinitely.

Restrict editing by a particular user
Use the user blocking functionality to deprive a user of all edit access. There is no way in the core software to restrict or allow particular users to edit particular pages, except by changing their usergroup.

Restrict page creation
Note: Revoking the edit right already prevents affected users from creating new pages and talk pages.

Restrict viewing of all pages
if you want anonymous users to be unable to view the wiki markup/code, you should not allow them to edit any page (see above). If they can edit any page, they can use template inclusion to view even pages they can't edit. This may be possible to avoid in 1.10 by using $wgNonincludableNamespaces (or in earlier versions using the NonincludableNamespaces extension), but that may not have been extensively tested.

This method is probably best combined with above, unless you want any visitor to be able to view the wiki after creating an account.

Uploaded images will still be viewable to anyone who knows the image directory's name. Either point $wgUploadPath to the img_auth.php script and follow the instructions in Manual:Image Authorization, or use some external method to protect images, like .htaccess.

If anonymous users can't view your page, neither can search engines. Your site will not be indexed on Google.

Add this line to your LocalSettings.php file:

The  setting allows users to view the main page and log in. Without this line, no one can log in. If page names have more than one word, use a space " " between them, not an underscore "_".

In addition to the main page of such a private site, you could give access to the Recentchanges page (if you think that its content isn't private) for feed readers by adding "Special:Recentchanges" to $wgWhitelistRead.

If you need to protect even the sidebar, main page, or login screen for any reason, it's recommended that you use higher-level authentication such as .htpasswd or equivalent.

Note that although Special:Listusers won't be available, it can be determined if a username is correct from Userlogin errors. You may want to give a common text for MediaWiki:wrongpassword and MediaWiki:nosuchusershort. Platonides 15:27, 22 May 2010 (UTC)

Restrict viewing of certain specific pages
To prevent anyone but sysops from viewing a page, it can simply be deleted. To prevent even sysops from viewing it, it can be removed more permanently with the Oversight extension. To completely destroy the text of the page, it can be manually removed from the database. In any case, the page cannot be edited while in this state, and for most purposes no longer exists.

To have a page act normally for some users but be invisible to others, as is possible for instance in most forum software, is a very different matter. MediaWiki is designed for two basic access modes:


 * 1) Everyone can view every single page on the wiki (with the possible exception of a few special pages).  This is the mode used by Wikipedia and its sister projects.
 * 2) Anonymous users can only view the Main Page and login page, and cannot edit any page.  This is basically the same as the above, in terms of technical implementation (just an extra check for every page view), which is why it exists.  This is the mode of operation used by certain private wikis such as those used by various Wikimedia committees.

If you intend to have different view permissions than that, MediaWiki is not designed for your usage. (See bug 1924.)  Data is not necessarily clearly delineated by namespace, page name, or other criteria, and there are a lot of leaks you'll have to plug if you want to make it so (see security issues with authorization extensions for a sample). Other wiki software may be more suitable for your purpose. You have been warned. If you must use MediaWiki, there are two basic possibilities:


 * 1) Set up separate wikis with a shared user database, configure one as viewable and one as unviewable (see above), and make interwiki links between them.
 * 2) Install a third-party hack or extension.  You will have to reapply it every time you upgrade the software, and it may not be updated immediately when new security fixes or upgrades of MediaWiki are released.  Third-party hacks are, of course, not supported by MediaWiki developers, and if you're having problems you shouldn't ask on MediaWiki-l, #mediawiki, or other official support channels.  One hack for this is the hidden namespaces patch; a number of others are listed in Category:Page specific user rights extensions.  Read about security issues with authorization extensions if you plan to use one of those.

Restricting viewing of pages to approved content
Normally, every time someone edits a page, the text of that revision is added to the database, and the page uses that as its source text. This means that any user can change the page at any time. All of the versions of the page are visible in the "page history".

To show certain "approved" revisions instead of the current revision, you will need the FlaggedRevs extension. Trusted users can review revisions of pages, and the text, templates, and images of the page revision shown at that time is recorded in the database. Recent changes can be patrolled in this fashion, and the approved versions are marked in the page histories.

Showing approved versions by default
With this extension, for non-users, unless the current or an old version was specifically requested, the newest approved version (called the "stable version") is selected and displayed. However, if there isn't one, then the current version is displayed with a disclaimer. This can be configured in a variety of ways to tailor to the needs of specific sites. See the extension documentation page for details.

Showing only approved versions
Once you have restricted viewing of all pages on your wiki (as described above), you can add an exception to allow readers to see the stable version of each page. Pages with no stable version cannot be viewed. As with any selected read restrictions, this is not recommended. Also, note that this will not work well if image authorization is enabled (readers may not see the images).

Pages which are approved and use templates or images which are not approved will still show those templates and images.

Restricting exporting

 * ''Check also : Manual:Parameters_to_Special:Export

It is not possible to export the contents of a protected page since 19935.
 * by protecting pages


 * by modifying SpecialPage.php

Removing the Login link from all pages
One can remove the login/create account link from the upper right corner of all pages, as users can still go to Special:SpecialPages>Special:UserLogin to login. In LocalSettings.php use (tested with MediaWiki 1.16)

Removing accounts
If you want to completely remove access to a user, e.g. on a simple private wiki, it's not possible to simply delete the account; you can block it, but the user will still be able to read pages. However, using User Merge and Delete extension you can merge the account in another one and delete the former; the original account will then "disappear". If you want to preserve history readability (i.e., to have edits from the user to be still shown under his name), you can create a new account e.g. with username "OriginalUserName (deactivated)" and then merge "OriginalUserName" into the former, or even use Renameuser extension to rename "OriginalUserName" into "AnotherUserName", then create an account under "OriginalUserName" and merge "AnotherUserName" into it: in this manner, "OriginalUserName" will be completely "usurped" (if you've set a non-null password).

In MediaWiki 1.16.0 it's possible to set $wgBlockDisablesLogin to true to prevent access and reading to blocked users.

Other restrictions
You may want to have pages editable only by their creator, or ban viewing of history, or any of a number of other things. None of these features are available in an unhacked version of MediaWiki. If you need more fine-grained permissions, see the section for links to other wiki packages that are designed for this, as well as hacks that attempt to contort MediaWiki into something it's not designed to be but may work anyway.