Index: includes/specials/SpecialUserlogout.php =================================================================== --- includes/specials/SpecialUserlogout.php (revision 62495) +++ includes/specials/SpecialUserlogout.php (working copy) @@ -10,6 +10,18 @@ function wfSpecialUserlogout() { global $wgUser, $wgOut; + /** + * Some satellite ISPs use broken precaching schemes that log people out straight after + * they're logged in (bug 17790). Luckily, there's a way to detect such requests. + */ + wfDebug( $_SERVER['REQUEST_URI'] . "\n" ); + if ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], '&' ) !== false ) { + wfDebug( "Detected suspicious Userlogout request, denying.\n" ); + $wgOut->setStatusCode( 400 ); + $wgOut->showErrorPage( 'errorpagetitle', 'suspicious-userlogout' ); + return; + } + $oldName = $wgUser->getName(); $wgUser->logout(); $wgOut->setRobotPolicy( 'noindex,nofollow' ); Index: languages/messages/MessagesEn.php =================================================================== --- languages/messages/MessagesEn.php (revision 62495) +++ languages/messages/MessagesEn.php (working copy) @@ -1137,6 +1137,7 @@ * EspaƱol|es * Italiano|it * Nederlands|nl', # do not translate or duplicate this message to other languages +'suspicious-userlogout' => 'Your request to log out was denied because it looks like it was created by a broken browser or caching proxy.', # Password reset dialog 'resetpass' => 'Change password', Index: maintenance/language/messages.inc =================================================================== --- maintenance/language/messages.inc (revision 62495) +++ maintenance/language/messages.inc (working copy) @@ -466,6 +466,7 @@ 'login-throttled', 'loginlanguagelabel', 'loginlanguagelinks', + 'suspicious-userlogout', ), 'resetpass' => array( 'resetpass',