X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=api.php;h=77dc52a4fb2faf679de93be55f80e3e247fdbc00;hb=00c184faed19e9e0a990979ae4f6c126d7aa6119;hp=7db2ce09b1fc1b4f11135887d3865b0d944eabf2;hpb=d656615e9f200af542751e713112ac9be42b135b;p=lhc%2Fweb%2Fwiklou.git diff --git a/api.php b/api.php index 7db2ce09b1..77dc52a4fb 100644 --- a/api.php +++ b/api.php @@ -37,6 +37,29 @@ require (dirname(__FILE__) . '/includes/WebStart.php'); wfProfileIn('api.php'); +// URL safety checks +// +// See RawPage.php for details; summary is that MSIE can override the +// Content-Type if it sees a recognized extension on the URL, such as +// might be appended via PATH_INFO after 'api.php'. +// +// Some data formats can end up containing unfiltered user-provided data +// which will end up triggering HTML detection and execution, hence +// XSS injection and all that entails. +// +// Ensure that all access is through the canonical entry point... +// +if( isset( $_SERVER['SCRIPT_URL'] ) ) { + $url = $_SERVER['SCRIPT_URL']; +} else { + $url = $_SERVER['PHP_SELF']; +} +if( strcmp( "$wgScriptPath/api$wgScriptExtension", $url ) ) { + wfHttpError( 403, 'Forbidden', + 'API must be accessed through the primary script entry point.' ); + return; +} + // Verify that the API has not been disabled if (!$wgEnableAPI) { echo 'MediaWiki API is not enabled for this site. Add the following line to your LocalSettings.php'; @@ -50,10 +73,16 @@ if (!$wgEnableAPI) { */ $processor = new ApiMain($wgRequest, $wgEnableWriteAPI); -// Generate the output. +// Process data & print results $processor->execute(); +// Execute any deferred updates +wfDoUpdates(); + // Log what the user did, for book-keeping purposes. wfProfileOut('api.php'); wfLogProfilingData(); -?> + +// Shut down the database +wfGetLBFactory()->shutdown(); +