Valider 7ddc9b59 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

fix: securisation du formulaire d'upload d'un plugin depuis un zip arbitraire...

fix: securisation du formulaire d'upload d'un plugin depuis un zip arbitraire ainsi que du formulaire d'ajout de nouveaux dépots ;
dans les 2 cas on demande au webmestre de saisir son mot de passe pour securiser l'action

Refs: https://git.spip.net/spip-team/securite/issues/4832 et https://git.spip.net/spip-team/securite/issues/4833
parent 403874a7
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -32,6 +32,9 @@ function action_teleporter_composant_dist($methode, $source, $dest, $options = a
	if (!preg_match(',' . substr(_DIR_LIB, 0, -1) . ',', $dest) && !_DIR_PLUGINS_AUTO) {
		die('Vous ne pouvez pas télécharger, absence de _DIR_PLUGINS_AUTO');
	}
	if (!autoriser('ajouter', '_plugins')){
		return _T('svp:erreur_teleporter_chargement_source_impossible', ['source' => $source]);
	}

	// verifier que la methode est connue
	if (!$teleporter = charger_fonction($methode, "teleporter", true)) {
+9 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -19,7 +19,13 @@
						<a class="spip_out" title="<:svp:bulle_ajouter_spipzone:>" href="https://plugins.spip.net/depots/principal.xml" onclick="$('#xml_paquets').attr('value',$(this).attr('href')).focus();return false;"><:svp:info_adresse_spipzone:></a>
					</p>
					[<span class="erreur_message">(#ENV{erreurs}|table_valeur{xml_paquets})</span>]
					<input type="text" name="xml_paquets" id="xml_paquets" value="[https://plugins.spip.net/depots/principal.xml(#VAL{depot}|svp_compter|table_valeur{depot}|=={0}|oui)]" class="text" />
					<input type="text" name="xml_paquets" id="xml_paquets" value="#ENV{xml_paquets}" class="text" />
				</div>
				<div class="editer editer_password[(#ENV{erreurs/password}|oui) erreur]">
					<label for="password"><:entree_mot_passe:></label>
					[<span class="erreur_message">(#ENV**{erreurs/password})</span>]
					<input type="password" name="password" id="password" value="#ENV{password}" class="text" />
					<p class='explication'><:svp:explication_mot_passe:></p>
				</div>
			</div>

+41 −11
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -20,7 +20,12 @@ if (!defined("_ECRIRE_INC_VERSION")) {
 **/
function formulaires_ajouter_depot_charger_dist() {
	// On ne renvoie pas les valeurs saisies mais on fait un raz systematique
	return array();

	$nb = (int)sql_countsel('spip_depots');
	return array(
		'xml_paquets' => $nb ? '' : "https://plugins.spip.net/depots/principal.xml",
		'password' => '',
	);
}

/**
@@ -36,17 +41,40 @@ function formulaires_ajouter_depot_charger_dist() {
function formulaires_ajouter_depot_verifier_dist() {

	$erreurs = array();
	$xml = trim(_request('xml_paquets'));

	if (!autoriser('ajouter', '_depots')) {
		$erreurs['message_erreur'] = _T('svp:erreur_teleporter_chargement_source_impossible', ['source' => '']);
	}
	else {
		if (empty($password = _request('password'))) {
			$erreurs['password'] = _T('info_obligatoire');
		}
		else {
			include_spip('inc/auth');
			if (!auth_controler_password_auteur_connecte($password)) {
				$erreurs['message_erreur'] = _T('svp:erreur_teleporter_chargement_source_impossible', ['source' => '']);
			}
		}

		$xml = trim(_request('xml_paquets'));
		if (!$xml){
			// L'url est obligatoire
			$erreurs['xml_paquets'] = _T('svp:message_nok_champ_obligatoire');
	} elseif (!svp_verifier_adresse_depot($xml)) {
		}

		if (empty($erreurs)) {
			if (!svp_verifier_adresse_depot($xml)) {
				// L'url n'est pas correcte, le fichier xml n'a pas ete trouve
		$erreurs['xml_paquets'] = _T('svp:message_nok_url_depot_incorrecte', array('url' => $xml));
				$erreurs['xml_paquets'] = _T('svp:message_nok_url_depot_incorrecte', ['url' => $xml]);
			} elseif (sql_countsel('spip_depots', 'xml_paquets=' . sql_quote($xml))) {
				// L'url est deja ajoutee
		$erreurs['xml_paquets'] = _T('svp:message_nok_depot_deja_ajoute', array('url' => $xml));
				$erreurs['xml_paquets'] = _T('svp:message_nok_depot_deja_ajoute', ['url' => $xml]);
			}
		}

	}
	if (count($erreurs)) {
		set_request('password');
	}

	return $erreurs;
@@ -81,7 +109,9 @@ function formulaires_ajouter_depot_traiter_dist() {
	} else {
		$retour['message_ok'] = _T('svp:message_ok_depot_ajoute', array('url' => $xml));
		spip_log("ACTION AJOUTER DEPOT (manuel) : url = " . $xml, 'svp_actions.' . _LOG_INFO);
		set_request('xml_paquets');
	}
	set_request('password');
	$retour['editable'] = true;

	return $retour;
+12 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<div class='formulaire_spip formulaire_configurer'>
<div class='formulaire_spip formulaire_#FORM'>
<h3 class='titrem'><:svp:titre_form_charger_plugin_archive:></h3>

[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
@@ -12,16 +12,22 @@

		<p class='explication'><:svp:telecharger_archive_plugin_explication:></p>
		<div class="editer-groupe">
			<div class="editer editer_archive haut obligatoire[(#ENV{erreurs/archive}|oui) erreur]">
			<div class="editer editer_archive pleine_largeur obligatoire[(#ENV{erreurs/archive}|oui) erreur]">
				<label for="archive"><:svp:label_archive:></label>
				[<span class="erreur_message">(#ENV{erreurs/archive})</span>]
				<input type="text" name="archive" value="#ENV{archive}" class="text" />
				[<span class="erreur_message">(#ENV**{erreurs/archive})</span>]
				<input type="text" name="archive" id="archive" value="#ENV{archive}" class="text" />
			</div>
			<div class="editer editer_destination[(#ENV{erreurs/destination}|oui) erreur]">
				<label for="destination"><:svp:label_destination:></label>
				[<span class="erreur_message">(#ENV{erreurs/destination})</span>]
				[<span class="erreur_message">(#ENV**{erreurs/destination})</span>]
				<input type="text" name="destination" id="destination" value="#ENV{destination}" class="text" />
				<p class='explication'><:svp:explication_destination:></p>
				<input type="text" name="destination" value="#ENV{destination}" class="text" />
			</div>
			<div class="editer editer_password[(#ENV{erreurs/password}|oui) erreur]">
				<label for="password"><:entree_mot_passe:></label>
				[<span class="erreur_message">(#ENV**{erreurs/password})</span>]
				<input type="password" name="password" id="password" value="#ENV{password}" class="text" />
				<p class='explication'><:svp:explication_mot_passe:></p>
			</div>
		</div>
		<p class='boutons'><input class='submit' type="submit" value="<:bouton_telecharger:>" /></p>
+42 −23
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,7 +21,8 @@ if (!defined("_ECRIRE_INC_VERSION")) {
function formulaires_charger_plugin_archive_charger_dist() {
	return array(
		'archive' => '',
		'destination' => ''
		'destination' => '',
		'password' => ''
	);
}

@@ -37,6 +38,12 @@ function formulaires_charger_plugin_archive_charger_dist() {
function formulaires_charger_plugin_archive_verifier_dist() {
	include_spip('inc/plugin'); // _DIR_PLUGINS_AUTO
	$erreurs = array();

	if (!autoriser('ajouter', '_plugins')) {
		$erreurs['message_erreur'] = _T('svp:erreur_teleporter_chargement_source_impossible', ['source' => '']);
	}
	else {

		if (!$archive = _request('archive')) {
			$erreurs['archive'] = _T('info_obligatoire');
		} else {
@@ -58,14 +65,26 @@ function formulaires_charger_plugin_archive_verifier_dist() {
					$base = dirname($dir);
					$nom = basename($dir);
					$backup = "$base/.$nom.bck";
				$erreurs['confirmer'] = _T("svp:confirmer_telecharger_dans", array(
					$erreurs['confirmer'] = _T('svp:confirmer_telecharger_dans', [
						'dir' => joli_repertoire($dir),
						'dir_backup' => joli_repertoire($backup)
				));
					]);
				}
			}
		}

		if (empty($password = _request('password'))) {
			$erreurs['password'] = _T('info_obligatoire');
		}
		else {
			include_spip('inc/auth');
			if (!auth_controler_password_auteur_connecte($password)) {
				$erreurs['message_erreur'] = _T('svp:erreur_teleporter_chargement_source_impossible', ['source' => '']);
			}
		}

	}

	return $erreurs;
}

Chargement en cours