Valider 4fccee33 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

report securite de r16904 r16905 r16906 :

Securite : redirections absolues depuis les actions (Matsuyama)
introduire une fonction tester_url_absolue() qui teste si une url est absolue.
L'utiliser dans le formulaire login et dans la securisation du parametre redirect de toutes les actions via public/aiguiller...

securite : cast sur $exec (Matsuyama)

securite : cast string sur la variable page de l'url (Matsuyama)
parent d192dab2
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+2 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -19,8 +19,8 @@ include_spip('inc/cookie');
function action_cookie_dist() {

	// La cible de notre operation de connexion
	$url = _request('url');
	$redirect = isset($url) ? $url : _DIR_RESTREINT;
	$url = securiser_redirect_action(_request('url'));
	$redirect = $url ? $url : generer_url_ecrire('accueil');
	$redirect_echec = _request('url_echec');
	if (!isset($redirect_echec)) {
		if (strpos($redirect,_DIR_RESTREINT_ABS)!==false)
+10 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -210,6 +210,16 @@ function set_request($var, $val = NULL, $c=false) {
	return false; # n'affecte pas $c
}


/**
 * Tester si une url est absolue
 * @param  $url
 * @return bool
 */
function tester_url_absolue($url){
	return preg_match(";^([a-z]+:)?//;Uims",trim($url))?true:false;
}

//
// Prend une URL et lui ajoute/retire un parametre.
// Exemples : [(#SELF|parametre_url{suite,18})] (ajout)
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -24,7 +24,7 @@ include_spip('inc/cookie');
// Determiner l'action demandee
//

$exec = _request('exec');
$exec = (string)_request('exec');
$reinstall = _request('reinstall')?_request('reinstall'):($exec=='install'?'oui':NULL);
//
// Les scripts d'insallation n'authentifient pas, forcement,
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -38,7 +38,7 @@ if (isset($GLOBALS['_INC_PUBLIC'])) {

	// fond demande dans l'url par page=xxxx ?
	else if (isset($_GET[_SPIP_PAGE])) {
		$fond = $_GET[_SPIP_PAGE];
		$fond = (string)$_GET[_SPIP_PAGE];

		// Securite
		if (strstr($fond, '/')
+11 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,6 +12,12 @@

if (!defined('_ECRIRE_INC_VERSION')) return;

function securiser_redirect_action($redirect){
	if (tester_url_absolue($redirect) AND !defined('_AUTORISER_ACTION_ABS_REDIRECT'))
		$redirect = "";
	return $redirect;
}

// http://doc.spip.org/@traiter_appels_actions
function traiter_appels_actions(){
	// cas de l'appel qui renvoie une redirection (302) ou rien (204)
@@ -31,12 +37,16 @@ function traiter_appels_actions(){
			$url = parametre_url($url,'var_ajax_env',$args,'&');
			set_request('redirect',$url);
		}
		else if(_request('redirect')){
			set_request('redirect',securiser_redirect_action(_request('redirect')));
		}
		$var_f = charger_fonction($action, 'action');
		$var_f();
		if (!isset($GLOBALS['redirect'])) {
			$GLOBALS['redirect'] = _request('redirect');
			if ($_SERVER['REQUEST_METHOD'] == 'POST')
				$GLOBALS['redirect'] = urldecode($GLOBALS['redirect']);
			$GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']);
		}
		if ($url = $GLOBALS['redirect']) {
			// si l'action est provoque par un hit {ajax}
Chargement en cours