* Improved input validation on Special:Import form
authorBrion Vibber <brion@users.mediawiki.org>
Mon, 17 Nov 2008 18:58:57 +0000 (18:58 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Mon, 17 Nov 2008 18:58:57 +0000 (18:58 +0000)
Applying Tim's fixes

RELEASE-NOTES
includes/specials/SpecialImport.php
languages/messages/MessagesEn.php

index 7faba68..5483cab 100644 (file)
@@ -348,6 +348,7 @@ The following extensions are migrated into MediaWiki 1.14:
   formatting and path exposure.
 * Less verbose errors from profileinfo.php when not configured
 * Blacklist redirects via Special:Filepath, hard to use.
+* Improved input validation on Special:Import form
 
 
 === API changes in 1.14 ===
index 833d6a8..a87918e 100644 (file)
@@ -43,26 +43,30 @@ function wfSpecialImport( $page = '' ) {
        if( $wgRequest->wasPosted() && $wgRequest->getVal( 'action' ) == 'submit') {
                $isUpload = false;
                $namespace = $wgRequest->getIntOrNull( 'namespace' );
+               $sourceName = $wgRequest->getVal( "source" );
 
-               switch( $wgRequest->getVal( "source" ) ) {
-               case "upload":
+               if ( !$wgUser->matchEditToken( $wgRequest->getVal( 'editToken' ) ) ) {
+                       $source = new WikiErrorMsg( 'import-token-mismatch' );
+               } elseif ( $sourceName == 'upload' ) {
                        $isUpload = true;
                        if( $wgUser->isAllowed( 'importupload' ) ) {
                                $source = ImportStreamSource::newFromUpload( "xmlimport" );
                        } else {
                                return $wgOut->permissionRequired( 'importupload' );
                        }
-                       break;
-               case "interwiki":
+               } elseif ( $sourceName == "interwiki" ) {
                        $interwiki = $wgRequest->getVal( 'interwiki' );
-                       $history = $wgRequest->getCheck( 'interwikiHistory' );
-                       $frompage = $wgRequest->getText( "frompage" );
-                       $source = ImportStreamSource::newFromInterwiki(
-                               $interwiki,
-                               $frompage,
-                               $history );
-                       break;
-               default:
+                       if ( !in_array( $interwiki, $wgImportSources ) ) {
+                               $source = new WikiErrorMsg( "import-invalid-interwiki" );
+                       } else {
+                               $history = $wgRequest->getCheck( 'interwikiHistory' );
+                               $frompage = $wgRequest->getText( "frompage" );
+                               $source = ImportStreamSource::newFromInterwiki(
+                                       $interwiki,
+                                       $frompage,
+                                       $history );
+                       }
+               } else {
                        $source = new WikiErrorMsg( "importunknownsource" );
                }
 
@@ -106,6 +110,7 @@ function wfSpecialImport( $page = '' ) {
                        Xml::hidden( 'action', 'submit' ) .
                        Xml::hidden( 'source', 'upload' ) .
                        Xml::input( 'xmlimport', 50, '', array( 'type' => 'file' ) ) . ' ' .
+                       Xml::hidden( 'editToken', $wgUser->editToken() ) .
                        Xml::submitButton( wfMsg( 'uploadbtn' ) ) .
                        Xml::closeElement( 'form' ) .
                        Xml::closeElement( 'fieldset' )
@@ -124,6 +129,7 @@ function wfSpecialImport( $page = '' ) {
                        wfMsgExt( 'import-interwiki-text', array( 'parse' ) ) .
                        Xml::hidden( 'action', 'submit' ) .
                        Xml::hidden( 'source', 'interwiki' ) .
+                       Xml::hidden( 'editToken', $wgUser->editToken() ) .
                        Xml::openElement( 'table', array( 'id' => 'mw-import-table' ) ) .
                        "<tr>
                                <td>" .
index 239ce97..312bcd4 100644 (file)
@@ -2803,6 +2803,8 @@ A temporary folder is missing.',
 'import-nonewrevisions'      => 'All revisions were previously imported.',
 'xml-error-string'           => '$1 at line $2, col $3 (byte $4): $5',
 'import-upload'              => 'Upload XML data',
+'import-token-mismatch'      => 'Loss of session data. Please try again.',
+'import-invalid-interwiki'   => 'Cannot import from the specified wiki.',
 
 # Import log
 'importlogpage'                    => 'Import log',