WebSecurity Italy Logo
  • WP PLUGINS
    • FaceBook Image Fix v0.4.3
    • wp-users-page
  • Staff
  • Job
  • Contacts
RSS WebSecurity Italy su Google WebSecurity Italy su Scoop.it WebSecurity Italy on Twitter WebSecurity Italy on Facebook WebSecurity Italy on Google+
  • Home
  • News
  • Sicurezza
  • Mobile
  • Seo&Social
  • Tips&Tricks
  • Video Geek
  • Crack Tools
    • Alice Wpa Calculator OnLine
    • Fastweb Wpa Calculator OnLine
    • MD5 Encrypt / Decrypt

Ads

Translator

Social Connection

Segui @capn3m0
Seguicisu Capn3m0 WebSecurity su Google+
Seguicisu Capn3m0 WebSecurity su Google Currents

Ultime Notizie

  • Keylogger: cosa sono e come difendersi Keylogger: cosa sono e come difendersi 18 giugno 2013 17:49
  • Tecnologia e connettività dentro e fuori l’Italia Tecnologia e connettività dentro e fuori l’Italia 17 giugno 2013 13:38
  • La guerra di Kim Dotcom La guerra di Kim Dotcom 17 giugno 2013 09:30
  • MajesticSEO rende gratuito Site Explorer! MajesticSEO rende gratuito Site Explorer! 14 giugno 2013 18:17

Tag Cloud

android anonymous app apple Browser censura cina copyright cupertino exploit facebook Google google glass hacker hacking ios ipad iphone iphone 5 joomla kim dotcom malware mega megaupload Microsoft mobile mountain-view novità privacy samsung seo Sicurezza sicurezza informatica sistema-operativo smartphone social social network tablet torrent twitter vulnerabilità windows windows 8 wordpress youtube

Meta

  • Registrati
  • Collegati
  • Voce RSS
  • RSS dei commenti
  • WordPress.org

[RAW FIX] – JOOMLA – Errore 500 in “Gestione Media” (com_media)

Tips&Tricks — scritto da capn3m0 il 21 ottobre 2009 22:35

Come feci in occasione del problema nell‘upload delle immagini in Virtuemart, questa volta vi illustro un tricks per risolvere un fastidioso problema che si può avere con il Joomla (solo nelle versioni 1.5.x) quando le cartelle “images” e “media” raggiungono una dimensione e un numero di file/cartelle elevato.

Questo CMS di default (personalmente non ne capisco il motivo) ha abilitata la “ricerca ricorsiva” per tutto ciò che riguarda l’elencazione (listing) di file e cartelle di una path. In questo caso in particolare mi riferisco al componente “com_media” che si occupa della gestione dei contenuti multimediali quali foto e video. Nella pagina principale dell’Amministrazione del Joomla andando su “Gestione Media” si accede ad un interfaccia stile “client ftp” che permette di navigare all’interno delle cartelle “images” e “media” ed eseguire le normali operazioni di cancellazione/modifica/etc su file e cartelle in esse contenute.

Il problema sorge quando il numero di file contenuti in queste due cartelle raggiunge dimensioni tali da non rendere possibile il listing di tutto il contenuto nei 120 secondi di Timeout impostati sul Server (tranne servizi dedicati appostivamente al Joomla i normali Hosting Provider impostano il max_execution_time a 120 secondi). Al termine di tale tempo se l’operazione non è completata, a seconda della configurazione e della versione del WebServer, viene mostrato l’errore “500 Internal Server Error” o “504 Gateway Timeout“. Tradotto in parole povere significa che lo script ha provato ad eseguire l’operazione ma il processo era ancora in corso trascorsi 2 minuti e pertanto è stato bloccato.

Per disabilitare la “ricerca ricorsiva”, quindi, è necessario aprire il file “manager.php” presente nella path:

<root_di_Joomla>/administrator/components/com_media/models/manager.php

e successivamente posizionarsi alle Righe 63 e 102 che appariranno così:


$folders = JFolder::folders($base, '.', true, true);


e modificarle variando il 1° true su false come di seguito:


$folders = JFolder::folders($base, '.', false, true);



Di seguito le prime righe della funzione che viene richiamata che dimostrano che il parametro variato va a disabilitare la ricorsione.


	/**
	 * Utility function to read the folders in a folder.
	 *
	 * @param	string	The path of the folder to read.
	 * @param	string	A filter for folder names.
	 * @param	mixed	True to recursively search into sub-folders, or an
	 * integer to specify the maximum depth.
	 * @param	boolean	True to return the full path to the folders.
	 * @param	array	Array with names of folders which should not be shown in
	 * the result.
	 * @return	array	Folders in the given folder.
	 * @since 1.5
	 */
	function folders($path, $filter = '.', $recurse = false, $fullpath = false, $exclude = array('.svn', 'CVS'))
	{
		// Initialize variables
		$arr = array();
 
		// Check to make sure the path valid and clean
		$path = JPath::clean($path);
 
		// Is the path a folder?
		if (!is_dir($path)) {
			JError::raiseWarning(21, 'JFolder::folder: ' . JText::_('Path is not a folder'), 'Path: ' . $path);
			return false;
		}
 
		// read the source directory
		$handle = opendir($path);
		while (($file = readdir($handle)) !== false)
		{
			if (($file != '.') &amp;&amp; ($file != '..') &amp;&amp; (!in_array($file, $exclude))) {
				$dir = $path . DS . $file;
				$isDir = is_dir($dir);
				if ($isDir) {
					// Removes filtered directories
					if (preg_match("/$filter/", $file)) {
						if ($fullpath) {
							$arr[] = $dir;
						} else {
							$arr[] = $file;
						}
					}
					if ($recurse) {
						if (is_integer($recurse)) {
							$arr2 = JFolder::folders($dir, $filter, $recurse - 1, $fullpath);
						} else {
							$arr2 = JFolder::folders($dir, $filter, $recurse, $fullpath);
						}
 
						$arr = array_merge($arr, $arr2);
					}
				}
			}
		}
		closedir($handle);
 
		asort($arr);
		return $arr;
	}


Come spiegato nei commenti della funzione stessa l’impostare su “false” il 3° parametro disabilita la ricorsione evitando il manifestarsi dell’errore di Timeout.
In alternativa è possibile modificare il parametro inserendo un valore numerico intero. Così facendo si indicano quanti livelli deve scendere nella ricerca dei file/cartelle.

Esempio della modifica da apportare se si vuole che la ricerca scenda al massimo di 3 livelli, ossia:

<root_di_Joomla>/images/cartella1/cartella2/cartella3

La riga andrebbe modificata nel seguente modo:


$folders = JFolder::folders($base, '.', 3, true);


Fatto ciò il problema sarò risolto e all’apertura del “com_media” verrà effettuata la ricerca per le sole cartelle “images” e “media” e per il numero di livelli da voi impostato. Tale modifica crea un piccolo problema visivo che, a mio avviso, non è molto rilevante poiché disabilitando la ricorsività dal menu ad albero del “Gestione Media” non si potrà vedere il solito “+” davanti alle cartelle che ne contengono delle altre. Analizzando solo il primo livello delle cartelle non può creare l’albero di navigazione fin da subito e pertanto si aggiornerà man mano che si scende nelle sottocartelle.

Per un problema risolto ritengo sia una piccola perdita.

Articoli che potrebbero interessarti:

Joomla su Kickstarter per creazione di API mo...
Joomla: Pizza, Bugs and Fun
WordPress e Joomla: iframe malevoli in aument...
Joomla Day 2012: a Torino la 5a edizione
  • m.cecili

    immagino che passare dalla 1.0 alla 1.5.x non sia proprio indolore..

    • http://www.websec.it capn3m0

      con jupgrade si riesce a fare.
      Visto che comunque va fatto.. dal mio punto di vista i siti con 1.0.x di Joomla hanno le ore contate perché comunque prima o poi arriverà qualcuno che proverà a sfruttare una delle numerose falle che ha.

      Passare alla 1.5.x non ha senso perché verrà abbandonata prossimamente e anche questa ha i suoi problemi.

      Dato che dovrai fare l’upgrade vale la pena passare a 1.7.3 anche perché stando alla roadmap dei ragazzi di Joomla le altre versioni prima o poi verranno abbandonate.

      ciao

  • m.cecili

    Ho provato anche io la tua modifica e funziona correttamente.
    Avevo pensato anche io di aggiornare la versione di joomla, gestisco infatti un altro sito con la versione 1.5.9 e non ho di questi problemi, a parte un problema secondo me molto simile con il componente phoca gallery, con il quale devo fare lo stesso gioco di rinominare le cartelle per poter acceddere senza errore di timeout alla pagine delle immagini per poter fare upload massivi, anche in questo caso dovrei aggiornare phoca gallery all’ultima versione che credo risolva il problema..
    Tornando sul pezzo: Quanto è rischioso / complicato aggiornare “a caldo” una versione di joomla?

    • http://www.websec.it capn3m0

      ciao,
      son contento che abbia funzionato ;)

      Per quanto riguarda l’aggiornamento di Joomla tra versioni della stessa famiglia da 1.5.x a 1.5.xx non è molto rischioso.
      Non avvengono modifiche sostanziali al Db e l’upgrade consiste nel sovrascrivere i file precedenti con i nuovi quasi sempre.

      Le migrazioni invece ossia passare da 1.5.x a 1.7.x per esempio, sono un po più complicate in quanto eseguono varie operazioni a livello di Database dato che devono importare i dati della precedente versione nella nuova struttura.

      Anceh in questo caso, però, l’operazione si riesce a fare senza troppi problemi.

      Il componente jUpgrade permette di farlo in modalità quasi innocua creando un nuovo sito con la versione nuova e i tuoi precedenti dati evitando, così, che i dati originali vengano in qualche modo alterati.

      ciao

  • m.cecili

    Esiste una soluzione simile per joomla 1.0?
    Ho lo stesso problema ed al momento l’unica soluzione è rinominare images in _images, fare le modifiche agli articoli. Al terminare rinominare la cartella in images.
    In joomla 1.0 il codice di ricorsiva si trova nel file
    miosito/administrator/components/com_media/admin.media.php

    /**
    * Show media manager
    * @param string The image directory to display
    */
    function showMedia($listdir) {
    global $mosConfig_live_site;

    // get list of directories
    $imgFiles = recursive_listdir( COM_MEDIA_BASE );
    $images = array();
    $folders = array();
    $folders[] = mosHTML::makeOption( “/” );

    $len = strlen( COM_MEDIA_BASE );
    foreach ($imgFiles as $file) {
    $folders[] = mosHTML::makeOption( substr( $file, $len ) );
    }
    if (is_array( $folders )) {
    sort( $folders );
    }
    // create folder selectlist
    $dirPath = mosHTML::selectList( $folders, ‘dirPath’, “class=\”inputbox\” size=\”1\” onchange=\”goUpDir()\” “, ‘value’, ‘text’, $listdir );

    HTML_Media::showMedia( $dirPath, $listdir );
    }

    Come la modificheresti?

    • http://www.websec.it capn3m0

      ciao,
      in primi ti direi di aggiornare quanto prima alle versioni più recenti dato che le vulnerabilità note per quella versione non si contano.
      Detto questo ho dato un’occhiata veloce ai file della versione 1.0.15 e l’unica cosa che mi viene in mente che puoi tentare è quella di commentare la riga 225 del file: components/com_media/admin.media.php.

      Dovresti trovare questo codice:

      function recursive_listdir( $base ) {
      static $filelist = array();
      static $dirlist = array();

      if(is_dir($base)) {
      $dh = opendir($base);
      while (false !== ($dir = readdir($dh))) {
      if ($dir !== ‘.’ && $dir !== ‘..’ && is_dir($base .’/’. $dir) && strtolower($dir) !== ‘cvs’ && strtolower($d
      ir) !== ‘.svn’) {
      $subbase = $base .’/’. $dir;
      $dirlist[] = $subbase;
      $subdirlist = recursive_listdir($subbase);
      }
      }
      closedir($dh);
      }
      return $dirlist;
      }

      Proverei a togliere la riga seguente o a mettere il cancelletto davanti alla stessa per commenarlo:

      #$subdirlist = recursive_listdir($subbase);

      Fammi sapere se risolvi.

      Buona giornata

      capn3m0

  • Giuseppe

    Grazie mille! Mi è stato utilissimo per risolvere il fastidioso errore “504 Gateway Timeout”.

capn3m0

Site Facebook Google+Segui @capn3m0
(administrator)
Sono un geek /nerd classe '83, innamorato dell'informatica dall'età di 7. Appassionato del Web, dei linguaggi di programmazione e di sicurezza informatica. Nel 2007 ho creato questo sito per raccogliere tutto ciò che apprendo giorno dopo giorno nelle mie esperienze con il mondo informatico.

315 16
Tags: com_media, internal server error, joomla

Subscribe to RSS Iscriviti al Feed RSS

Oppure lascia la tua email per essere sempre aggiornato con le ultime notizie.

© Copyright 2008-2013 — WebSecurity IT. All Rights Reserved. | Hosted by WpSEO - Hosting WordPress Power
Il Bloggatore Paperblog : le migliori informazioni in diretta dai blog Segnala a Zazoom - Blog Directory
Tweet