Skip to content
Extraits de code Groupes Projets
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
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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)
......
......@@ -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)
......
......@@ -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,
......
......@@ -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, '/')
......
......@@ -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)
......@@ -30,13 +36,17 @@ function traiter_appels_actions(){
$url = parametre_url($url,'var_ajax',$v,'&');
$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}
......
......@@ -15,8 +15,9 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('base/abstract_sql');
function is_url_prive($cible){
$parse = parse_url($cible);
return strncmp(substr($parse['path'],-strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS))==0;
include_spip('inc/filtres_mini');
$path = parse_url(tester_url_absolue($cible)?$cible:url_absolue($cible),PHP_URL_PATH);
return strncmp(substr($path,-strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS))==0;
}
function formulaires_login_charger_dist($cible="",$login="",$prive=null)
......@@ -194,7 +195,7 @@ function formulaires_login_traiter_dist($cible="",$login="",$prive=null){
// si c'est une url absolue, refuser la redirection
// sauf si cette securite est levee volontairement par le webmestre
elseif (preg_match(";^([a-z]+:)?//;Uims",$cible) AND !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
elseif (tester_url_absolue($cible) AND !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
$cible = "";
}
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter