JeromeDevome / GRR

GRR Officiel - Copyright Team DEVOME
https://grr.devome.com
GNU General Public License v2.0
84 stars 53 forks source link

Problème remote DB et GRR v4.0.0 (DEPRECATED error bloquante) #226

Closed Aurely9n closed 1 year ago

Aurely9n commented 1 year ago

Décrivez le bogue J'ai voulu passer à la version release v4.0.0 de GRR et après avoir installé la nouvelle version via github puis copié les fichiers/ dossiers personnalisés à la place recommandé (notamment pour le fichier de connexion à la DB), et lorsque j'essaie d'accéder à mon service GRR sur https://monservice.fr/grr, je suis bloqué. Une erreur de type "Deprecated: phpCAS autoloader is deprecate" dempèche le fonctionnement du système.

Infos GRR Version de GRR : 4.0.0 Version PHP : PHP 7.2.34 ou PHP 8.1.13 Problème suite à une installation ou mise à jour : Mise à jour

Reproduire Étapes pour reproduire le comportement :

  1. Créer le nouveau dossier GRR pour apache soit en passant par le téléchargement de l'archive https://github.com/JeromeDevome/GRR/archive/refs/tags/v4.0.0.zip soit en faisant un git clone https://github.com/JeromeDevome/GRR.git
  2. Copier le fichier connect.inc.php (de l'ancienne version fonctionnelle 3.5.0 de GRR ) dans le dossier personnalisation
  3. Lancer GRR sans faire de modification de fichier par exemple https://monservice.fr/grr
  4. Erreur DEPRECATED apereo/phpCAS

Comportement attendu Le système devrait nous permettre d'accéder à la mise à jour de la DB (ou en tout cas accéder à GRR sans erreur phpCAS)

Contexte supplémentaire Le problème semble survenir car j'accède à une base de donnée remote (pas localhost) via ip (ex: $dbHost = '999.111.000.AA') remote

Or lorsque je change la valeur de $dbHost par "localhost", je n'ai plus l'erreur et je pourrais mettre à jour la DB apparement. C'est évidemment un souci puisque mes fichiers GRR et ma DB sont sur 2 serveurs séparés. Et avec la version 3.5.0, ça fonctionne sans problème. localhost

J'ai essayé de mettre à jour les packages de composer cela ne change rien au problème.

Bien à vous,

Aurely9n commented 1 year ago

Bonjour, Je précise que j'ai tester la version "$DBhost=localhost" mais après la mise à jour de la DB qui fonctionne parfaitement, je me retrouve bloquer avec la même erreur DEPRECATED...

Cordialement,

Aurely9n commented 1 year ago

Bonjour, Je viens de trouver les problèmes qui se situent tous au niveau de GRR/include/cas.inc.php. L'inclusion fichier CAS.php doit être remplacé par l'utilisation de l'autoload de composer: Remplacer ligne 21 include_once('vendor/apereo/phpcas/source/CAS.php'); par include_once('vendor/autoload.php');

De plus, les dernières version de phpCAS ont ajoutées un paramètre essentiel dans la methode phpCAS::client : remplacer ligne 39: phpCAS::client(CAS_VERSION_2_0,$serveurSSO,$serveurSSOPort,$serveurSSORacine,true); par phpCAS::client(CAS_VERSION_2_0,$serveurSSO,$serveurSSOPort,$serveurSSORacine,'https://mondomain.com',true);

UNIQUEMENT si la version de phpCAS est supérieur ou églament à 1.5.x (je ne suis plus très sur). Mais en gros il faut tester la version de phpCAS et changer la méthode du client en fonction. Il faudrait aussi pouvoir changer la version de CAS (CAS_VERSION_2_0 / CAS_VERSION_3_0) dans le backend.

Cordialement,

JeromeDevome commented 1 year ago

Bonjour, Merci pour les infos 👍 Je viens de mettre à jour la branche master avec vos différentes remarques, pouvez vous tester et me dire si cela est fonctionnel.

Pour ma part mon environnement SSO est HS, je n'ai donc testé que la partie admin de la sélection de version.

Aurely9n commented 1 year ago

Bonjour, Nous ça n'a pas fonctionné. Il y a quelques erreurs que j'ai corrigé et dont voici le code :

if( phpCAS::getVersion() < '1.6.0' ){
  phpCAS::client( constant( $cas_version ), $serveurSSO, $serveurSSOPort, $serveurSSORacine, true );
} else{
  $parseUrl       = parse_url( $client_service_name );
  $domain_service = $parseUrl['scheme'].'://'.$parseUrl['host'];
  if ( isset( $parseUrl['port'] ) )
    $domain_service .= ':'.$parseUrl['port'];
    phpCAS::client( constant( $cas_version ), $serveurSSO, $serveurSSOPort, $serveurSSORacine, $domain_service, true );
}

La variable $cas_version que vous créé en amont n'est pas la version du CAS mais la version du protocole CAS et elle prend comme valeur celles qui sont définies dans phpCAS. Il font donc utiliser la valeur de la constante et pas juste le chaine de caractère 'CAS_VERSION...'. Par contre, c'est bien la version de phpCAS qu'il faut tester car la méthode phpCAS:client change à partir de la version de la version 1.6.0 de phpCAS.

A savoir que je préconise FORTEMENT d'ajouter cette fonctionnalité aux versions précédentes (3.5.X) car ce changement de client CAS fait suite à une faille critique de sécurité découverte dans les versions précédentes. Il faut impérativement mettre à jour son package phpCAS.

JeromeDevome commented 1 year ago

Thx, J'ai poussé la modification, je comprend mieux. Merci pour les explications. En effet, il faut mettre à jour dans les versions 3.4.X et 3.5.X qui sont à ce jour encore maintenu.

Pouvez vous me confirmer que la modif du du fichier est bonne ?

Que pensez vous de la refonte de la page config SSO que j'ai fais hier ?

Aurely9n commented 1 year ago

Je confirme. Les modifications apportées fonctionnent correctement.

Votre page config SSO est très correcte je trouve. Seulement, vous avez mis 2 inputs dont les libellés sont identiques : "Version du CAS". Je n'aurai pas nommé le 1er champ comme ça .Le premier j'aurai plutôt titré, "Système SSO" (et placé ailleurs peut-être mais ça pas sûr...) C'est surtout cosmétique ça. Et le second, je l'aurai plutôt libellé "Version du protocole CAS". Enfin, dernière remarque, il y a une méthode dans la classe phpCAS qui permet de récupérer les libellés et les valeurs des versions du protocole CAS. Je pense que ce serait plus dynamique et évolutif de récupérer ce tableau de valeurs à réinjecter dans le formulaire de configuration SSO (les options du select[name='cas_version']) plutôt que de les écrire en durs dans le "form".

Allez, je ne vous embête plus et merci beaucoup pour les retouches/corrections !

Bien à vous