Browse Source

Centraliser le calcul des cles de document dans une fonction unique accesrestreint_calculer_cle_document() et permettre de changer ces cles via un define de secret complementaire dans la constante _ACCESRESTREINT_SECRET_SIGNATURE_DOCUMENTS

pull/4/head
Cerdic 2 years ago
parent
commit
b58122e7b1
  1. 25
      accesrestreint_options.php
  2. 3
      action/api_docrestreint.php
  3. 7
      urls/generer_url_document.php

25
accesrestreint_options.php

@ -29,3 +29,28 @@ if (isset($GLOBALS['meta']['accesrestreint_base_version'])) {
$GLOBALS['marqueur'] .= ':accesrestreint_zones_autorisees='
.$GLOBALS['accesrestreint_zones_autorisees'];
}
/**
* Calcul unifié et centralisé du hash associé à un document
* @param int $id_document
* @param string $fichier
* @return string
*/
function accesrestreint_calculer_cle_document($id_document, $fichier) {
if (!function_exists('calculer_cle_action')) {
include_spip('inc/securiser_action');
}
$sign = [$id_document, $fichier];
// si _ACCESRESTREINT_SECRET_SIGNATURE_DOCUMENTS est definie, on l'ajoute : cela permet d'invalider les cles dans la nature est d'en regenerer de nouvelles
// ie on peut avoir des urls temporaires en liant ce secret a la date (mais cache a gerer, car il n'y a pas de recouvrement, le changement est brutal)
if (defined('_ACCESRESTREINT_SECRET_SIGNATURE_DOCUMENTS') and _ACCESRESTREINT_SECRET_SIGNATURE_DOCUMENTS) {
$sign[] = _ACCESRESTREINT_SECRET_SIGNATURE_DOCUMENTS;
}
// cette url doit etre publique !
$cle = calculer_cle_action(implode(',', $sign));
return $cle;
}

3
action/api_docrestreint.php

@ -584,8 +584,7 @@ class Accesrestreint_document {
// en controlant la cle passee en argument si elle est dispo
// (perf issue : toutes les urls ont en principe cette cle fournie dans la page au moment du calcul de la page)
if ($this->cle_action && !defined('ACCES_RESTREINT_FORCE_AUTORISE')) {
include_spip('inc/securiser_action');
if (!verifier_cle_action($doc['id_document'].','.$this->_fichier, $this->cle_action)) {
if ($this->cle_action !== accesrestreint_calculer_cle_document($doc['id_document'], $this->_fichier)) {
spip_log("acces interdit $this->cle_action erronee pour #".$doc['id_document'].' : '.$this->_fichier,'accesrestreint');
return false;
}

7
urls/generer_url_document.php

@ -54,12 +54,11 @@ function urls_generer_url_document_dist($id, $args = '', $ancre = '', $public =
return get_spip_doc($f);
}
include_spip('inc/securiser_action');
// cette url doit etre publique !
$cle = calculer_cle_action($id.','.$f);
// cette url doit etre publique : generer un hash qui signe l'acces autorise au document
$cle = accesrestreint_calculer_cle_document($id, $f);
// renvoyer une url plus ou moins jolie
// @see accesrestreint_gerer_htaccess()
if (isset($GLOBALS['meta']['creer_htaccess']) and $GLOBALS['meta']['creer_htaccess']) {
$url = url_absolue(_DIR_RACINE."docrestreint.api/$id/$cle/$f");
} else {

Loading…
Cancel
Save