Valider 6b5de38a rédigé par cerdic's avatar cerdic Validation de marcimat
Parcourir les fichiers

Divers petites sanitization et une balise manquante #4494

parent f6cfbce1
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+11 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -352,6 +352,17 @@ function filtre_setenv(&$Pile, $val, $key, $continue = null) {
	return $continue ? $val : '';
}

/**
 * @param array $Pile
 * @param array|string $keys
 * @return string
 */
function filtre_sanitize_env(&$Pile, $keys) {
	$Pile[0] = spip_sanitize_from_request($Pile[0], $keys);
	return '';
}


/**
 * Filtre `debug` qui affiche un debug de la valeur en entrée
 *
+4 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -50,7 +50,7 @@ function precharger_objet($type, $id_objet, $id_rubrique = 0, $lier_trad = 0, $c

	// si l'objet existe deja, on retourne simplement ses valeurs
	if (is_numeric($id_objet)) {
		return sql_fetsel("*", $table, "$_id_objet=$id_objet");
		return sql_fetsel("*", $table, "$_id_objet=".intval($id_objet));
	}

	// ici, on demande une creation.
@@ -133,7 +133,7 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_t
	$_id_objet = id_table_objet($table);

	// Recuperer les donnees de l'objet original
	$row = sql_fetsel("*", $table, "$_id_objet=$lier_trad");
	$row = sql_fetsel("*", $table, "$_id_objet=".intval($lier_trad));
	if ($row) {
		include_spip('inc/filtres');
		$row[$champ_titre] = filtrer_entites(objet_T($type, 'info_nouvelle_traduction')) . ' ' . $row[$champ_titre];
@@ -172,12 +172,12 @@ function precharger_traduction_objet($type, $id_objet, $id_rubrique = 0, $lier_t
					$id_parent = 0;
				} else {
					// on cherche une rubrique soeur dans la bonne langue
					$row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_rubrique");
					$row_rub = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=".intval($id_rubrique));
					$id_parent = $row_rub['id_parent'];
				}

				$row_rub = sql_fetsel("id_rubrique", "spip_rubriques",
					"lang='" . $GLOBALS['spip_lang'] . "' AND id_parent=$id_parent");
					"lang='" . $GLOBALS['spip_lang'] . "' AND id_parent=".intval($id_parent));
				if ($row_rub) {
					$row['id_rubrique'] = $row_rub['id_rubrique'];
				}
+37 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -446,6 +446,43 @@ function set_request($var, $val = null, $c = false) {
	return false; # n'affecte pas $c
}

/**
 * Sanitizer une valeur *SI* elle provient du GET ou POST
 * Utile dans les squelettes pour les valeurs qu'on attrape dans le env,
 * dont on veut permettre à un squelette de confiance appelant de fournir une valeur complexe
 * mais qui doit etre nettoyee si elle provient de l'URL
 *
 * On peut sanitizer
 * - une valeur simple : `$where = spip_sanitize_from_request($value, 'where')`
 * - un tableau en partie : `$env = spip_sanitize_from_request($env, ['key1','key2'])`
 * - un tableau complet : `$env = spip_sanitize_from_request($env, '*')`
 *
 * @param string|array $value
 * @param string|array $key
 * @param string $sanitize_function
 * @return array|mixed|string
 */
function spip_sanitize_from_request($value, $key, $sanitize_function='entites_html') {
	if (is_array($value)) {
		if ($key=='*') {
			$key = array_keys($value);
		}
		if (!is_array($key)) {
			$key = [$key];
		}
		foreach ($key as $k) {
			if (!empty($value[$k])) {
				$value[$k] = spip_sanitize_from_request($value[$k], $k, $sanitize_function);
			}
		}
		return $value;
	}
	// si la valeur vient des GET ou POST on la sanitize
	if (!empty($value) and $value == _request($key)) {
		$value = $sanitize_function($value);
	}
	return $value;
}

/**
 * Tester si une URL est absolue
+7 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,6 +15,13 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}

function securiser_redirect_action($redirect) {
	// cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect
	if (strpos($redirect, '%') !== false) {
		$r2 = urldecode($redirect);
		if (($r3 = securiser_redirect_action($r2)) !== $r2) {
			return $r3;
		}
	}
	if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect)))
		and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) {
		// si l'url est une url du site, on la laisse passer sans rien faire
+13 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1728,6 +1728,19 @@ function balise_REM_dist($p) {
	return $p;
}

/**
 * Une balise #NULL quand on a besoin de passer un argument null sur l'appel d'un filtre ou formulaire
 * (evite un #EVAL{null})
 * @param $p
 * @return mixed
 */
function balise_NULL_dist($p) {
	$p->code = "null";
	$p->interdire_scripts = false;

	return $p;
}


/**
 * Compile la balise `#HTTP_HEADER` envoyant des entêtes de retour HTTP
Chargement en cours