Extension:CheckUser/cs


 *  This page is about the extension itself. For the Wikimedia Foundation CheckUser policy, see m:CheckUser policy. 

CheckUser is an extension that allows a user (with the  permission) to check which IP addresses are used by a given username and which usernames are used by a given IP, without having to run queries directly against the database by hand. The extension is running live on all Wikimedia wikis.

Installation
The extension is released under the GNU General Public License 2.0 or later. The software is provided as-is. Updates will be made according to the needs of Wikimedia wikis; or where critical vulnerabilities are discovered.

Basic

 * If you have installed other extensions without running, run that first.

Installing without command prompt access
Many hosting providers don't allow direct shell access, but allow creation of cron jobs (e.g. via cPanel web interface). For those hosting providers a temporary cron job can be used to run  (naturally   should be replaced with real full path to  ). If you are using a remote server and do not have command prompt access (nor cron job solution is suitable for you), but do have access through phpMyAdmin, substitute these steps for step #2 above:


 * 1) Choose and download the tables_generated.sql file from the CheckUser/schema folder. Navigate in to the folder of the DB you are running to find the files.
 * 1) In phpMyAdmin, click the database you're using for MediaWiki along the left side
 * 1) On the next screen, click the "Import" tab at the top.
 * 1) At "Location of the text file", choose one of the files, select compression "None", and click the bottom "Go" button.
 * If your phpMyAdmin screen has only a text field and no text file chooser, click the "SQL" button in the left-side column, under the phpMyAdmin logo, and click the "import files" tab in the new window that opens.
 * 1) Repeat for the second file

On a new wiki
Follow step 1 as above, then run the MediaWiki installation. The MediaWiki installer will automatically perform the installation tasks if you select the checkbox for CheckUser when prompted for which extensions to install.

Using Mediawiki-Docker
Follow the steps in to install this extension inside a MediaWiki Docker instance.

Configuration
This tool copies recent changes data to separate tables, and adds to that when new entries are added. If  is set to , the copied data will not contain the associated IP address. However, entries added after installation of this extension will contain the IP address.

After installation of this extension, you can reduce  to make recentchanges shorter without affecting checkuser. Use  to set how far back checkuser data can go, in seconds.

The CheckUser-specific setting $wgCheckUserCIDRLimit determines the largest range that can be checked in a single check. Its format is the same as. The default limit is  for   checks and   for   checks.

To allow this tool to log successful and failed login attempts as well as logouts, set  to. If you have bot accounts on your wiki, setting  to  will skip logging successful login attempts to bot accounts.

Granting right to use CheckUser
To grant the right to use the Check User function, a user with user rights management must go to Special:UserRights and enter the user's name in the box, then select the option "checkuser". Once this is done, Special:CheckUser and Special:CheckUserLog will show up in Special:SpecialPages page for that user.

To give sysops the rights this extension provides, put the following into :

To only allow the adding and removing of the  permission, use the following instead:

Basic interface
For notation, see. Try to succinctly summarise the situation (for example, "cross-wiki spam"); this will be logged in a log visible only to users with the  permission.
 * 1) Go to Special:CheckUser.
 * 1) In the user field, type in the username (without the   prefix), IP address, or CIDR range.
 * 1) * IP: any IPv4 or IPv6 address.
 * 1) * CIDR: you can check a range of IP addresses by appending the CIDR prefix (by default, up to /16 for IPv4 (65,536 addresses), up to /64 for IPv6 (~1.8446*1019 addresses) before 7352, up to /48 for IPv6 (~1.2089*1024 addresses or 65536 /64s - controlled by $wgCheckUserCIDRLimit in the latest version) after revision 7352, and up to /32 (65536 /48's) after rECHU9d7c239bf88866eca577f3241194d440f94fa014).
 * 1) * XFF: you can check a client IP address provided by X-Forwarded-For headers by appending  (for example,  ).
 * 1) Select the information you want to retrieve.
 * 1) *  - returns IP addresses used by a registered user.
 * 2) *  - returns all edits and logged actions made by users using an IP address or range specified in the target field, or if the target is a user all edits and logged actions by that user.
 * 3) *  - returns user accounts that have edited from an IP or range.
 * 1) In the "" field, type in the reason you are accessing the confidential data.

Information returned
A typical entry in the CheckUser results for a user summary ("get users") is as follows:


 * Example (talk | contribs | block) (Check) (20:11, -- 20:12, ) [5]
 * 127.0.0.37 XFF: 127.0.0.1, 127.0.0.5
 * Example user agent
 * Example user agent

This is formatted to fit a lot of information into a format that can very easily be listed and skimmed, but is difficult to read unless you know what the information provided is. The information is laid out as follows:


 * username ( user links ) ( time period when they edited from the given IP or range ) [ number of edits from the IP or range ]
 * IP address edited from XFF: XFF information provided (can be spoofed)

Each IP/XFF combination used to edit is listed, in order of use.

The last ten user agents (browser, operating system, system language, and versions) for each user for edits made in the IP or range are listed afterwards.

XFF Format
XFF (X-Forwarded-For) headers indicate the series of IP addresses used from the user's computer (first) to the last proxy server. In case of Wikimedia, the last proxy server is one of the Wikimedia proxies (listed under in the Wikimedia configuration file).

In this example:

aaa.aaa.aaa.aaa       XFF: 10.4.46.42, 127.0.0.1, aaa.aaa.aaa.aaa, 208.80.152.46


 * the first two addresses are private to the originating network and can't be reached directly from the public Internet,
 * the third address is the "public face" of the editor, usually a broadband or dial-up ISP, a company gateway, (but possibly an anonymizer or a malware-compromised server),
 * the last address is one of the Wikimedia squids.

MediaWiki configuration settings, , and extensions using the  hook (such as ) change the way an actual IP address used to attribute edits is selected.

Personal tool links
When you get results from Special:CheckUser you can add personal user tool links via two interface messages:


 * for IP addresses (for example m:MediaWiki:checkuser-userlinks-ip)
 * for registered users (for example m:MediaWiki:Checkuser-userlinks)
 * - for IPs in the 'Get IP Addresses' check type (for example m:MediaWiki:checkuser-toollinks)

Basic usage

 * 1) Go to Special:Investigate.
 * 1) In the Usernames and IP addresses field, type in up to 10 targets, which may be usernames (without the   prefix), IP addresses, or CIDR ranges.
 * 2) In the Reason field, enter the reason you are accessing the confidential data, as described in the Special:CheckUser instructions above; this will be logged in a log visible only to users with the checkuser-log permission.

For advanced feature usage, see Help:Special Investigate.

Customizing tool links
As with Special:CheckUser, links to external tools can be customized.

The links are defined in the  message. This message is parsed to find links, which are added to the menu in the IPs and user agents tab.

Showing IPs for temporary accounts
The CheckUser extension will show since MediaWiki 1.40 a button that is displayed next to temporary account user links which allows the revealing of their IP address.

This functionality is available exclusively to users with the  privilege, granting them the ability to view the IP addresses that are linked to temporary accounts. To access this information, the Enable revealing IP addresses for temporary accounts feature must be enabled on the user's Special:Preferences page.

These buttons will appear wherever user links are shown for a temporary account, such as when viewing page histories or in Special:Contributions. However, these will not be shown on Special:CheckUser, Special:Investigate or Special:InvestigateBlock.

CheckUser and CheckUserLog API
CheckUser provides an API that allows access to the information shown on Special:CheckUser and Special:CheckUserLog. These two APIs work fairly similarly to the special pages, but the reasop for a check using the API is prefixed with "API:" to indicate they were made using the API. Example usages of these APIs are shown below.

api.php?action=query&list=checkuser&curequest=userips&cutarget=Jimbo_Wales api.php?action=query&list=checkuser&curequest=edits&cutarget=127.0.0.1/16&xff=1&cureason=Some_check
 * CheckUser API

api.php?action=query&list=checkuserlog&culuser=WikiSysop&cullimit=25 api.php?action=query&list=checkuserlog&cultarget=127.0.0.1&culfrom=20111015230000
 * CheckUserLog API

Temporary Account Reveal API
 Usage 

The TemporaryAccountHandler class offers API endpoints for retrieving the IP addresses associated with temporary user accounts. To access this information, the Enable revealing IP addresses for temporary accounts feature must be enabled on the user's Special:Preferences page.

 API endpoint 

where  is the user name you want to look up

 Response 

If the request is successful, the API will respond with a JSON object containing the following fields: If the request fails, the API will respond with an appropriate error code and message.

 Example request 

 Example response 

TemporaryAccountRevisionHandler
The TemporaryAccountRevisionHandler class offers API endpoints for viewing revision data for temporary accounts. Params are in the querystring (e.g. /rest.php/checkuser/v0/temporaryaccount/*Unregistered%203/revisions/31); which will show revisions.

API endpoint

where {revisionId} is the revision ID you want to look up.

Response

If the request is successful, the API will respond with a JSON object containing the following fields:

If the request fails, the API will respond with an appropriate error code and message.

Example request

Example response