Skip to content
Extraits de code Groupes Projets
Valider 5818a75d rédigé par Fil's avatar Fil
Parcourir les fichiers

Pour securiser l'acces aux documents, on passe desormais une cle dans l'URL;...

Pour securiser l'acces aux documents, on passe desormais une cle dans l'URL; soit on a obtenu cette cle, et on peut voir le doc, soit non et on ne peut pas le voir : on ne regarde donc plus le statut du document a chaque hit, ca devrait alleger le serveur (sich)
parent 3bcb9eac
Branches
Étiquettes
Aucune requête de fusion associée trouvée
......@@ -25,8 +25,8 @@ function action_acceder_document_dist() {
include_spip('inc/documents');
// $file exige pour eviter le scan id_document par id_document
$file = rawurldecode(_request('file'));
$file = get_spip_doc($file);
$f = rawurldecode(_request('file'));
$file = get_spip_doc($f);
$arg = rawurldecode(_request('arg'));
$status = $dcc = false;
......@@ -57,8 +57,10 @@ function action_acceder_document_dist() {
//
// Verifier les droits de lecture du document
// en controlant la cle passee en argument
//
if (!autoriser('voir', 'document', $doc['id_document']))
include_spip('inc/securiser_action');
if (_request('cle') != calculer_cle_action($doc['id_document'].','.$f))
$status = 403;
}
}
......
......@@ -42,7 +42,7 @@ function creer_pass_aleatoire($longueur = 8, $sel = "") {
}
//
// Creer un identifiant aleatoire (a fusionnner avec le precedent ?)
// Creer un identifiant aleatoire
//
// http://doc.spip.org/@creer_uniqid
......@@ -123,7 +123,6 @@ function initialiser_sel() {
else return "";
}
// Cette fonction ne sert qu'a la connexion en mode http_auth.non LDAP
// Son role est de creer le fichier htpasswd
// Voir le plugin "acces restreint"
......
......@@ -63,9 +63,16 @@ function generer_url_document_dist($id_document, $args='', $ancre='') {
// par exemple acces_restreint
if ($GLOBALS['meta']["creer_htaccess"] == 'oui'
AND $row['distant'] != 'oui') {
$args .= ($args ? "&" : '') . "arg=$id_document&file=" . rawurlencode($row['fichier']) . ($ancre ? "&ancre=$ancre" : '');
include_spip('inc/securiser_action');
$args .= ($args ? "&" : '')
. 'arg='.$id_document
. ($ancre ? "&ancre=$ancre" : '')
. '&cle=' . calculer_cle_action($id_document.','.$row['fichier'])
. '&file=' . rawurlencode($row['fichier'])
;
return generer_url_action('acceder_document', $args);
} else return get_spip_doc($row['fichier']);
} else
return get_spip_doc($row['fichier']);
}
//
......
......@@ -110,5 +110,32 @@ function verifier_action_auteur($action, $valeur) {
return false;
}
//
// Des fonctions independantes du visiteur, qui permettent de controler
// par exemple que l'URL d'un document a la bonne cle de lecture
//
// Le secret du site doit rester aussi secret que possible, et est eternel
// On ne doit pas l'exporter
function secret_du_site() {
if (!isset($GLOBALS['meta']['secret_du_site'])
OR !strlen($GLOBALS['meta']['secret_du_site'])
) {
include_spip('inc/acces');
ecrire_meta('secret_du_site', creer_uniqid(), 'non');
}
return $GLOBALS['meta']['secret_du_site'];
}
// http://doc.spip.org/@calculer_cle_action
function calculer_cle_action($action) {
return md5($action . secret_du_site());
}
// http://doc.spip.org/@verifier_cle_action
function verifier_cle_action($action, $cle) {
return ($cle == calculer_cle_action($action));
}
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter