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'], '&amp;' ) !== 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',
