Bonjour,

Je viens demander un peu d'aide SVP,
car pour sécuriser mon PGRFileManager.php (que j'utilise avec ckeditor) je doit pouvoir gérer "complétement les SESSION".

Actuellement, si un visiteur va à cette adresse :
http://my-web-site.com/ckeditor/plugins/pgrfilemanager/PGRFileManager.php
Dans l'état actuelle des choses, il aura accès à la gestion de mes images...

Donc pour sécuriser ceci je doit faire en sorte que si ce n'est pas un user de mon Admin, le rediriger...

Donc au login je créer une nouvelle SESSION 'usercms' :

<?php
public function postLogin(Request $request)
{
    $login = Auth::attempt([
                            'username' => $request->input('username'),
                            'password' => $request->input('password')
                        ], $request->input('remember'));

    if ($login) {
        Session::put('usercms', 'EXISTE');  // CREATE SESSION
        ...
    }
}

OK.
_Mais le problème, lorsque je met ce code dans mon fichier PGRFileManager.php :

<?php
session_start();
var_dump($_SESSION['usercms']);

Wamp me retourne cette erreur :
"Notice: Undefined index: usercms in C:\wamp\www___Laravel\editeurs-texte\ckeditor\plugins\pgrfilemanager\PGRFileManager.php on line 4"

Comment résoudre ce problème SVP ?
Merci.

7 réponses


otakodes
Réponse acceptée

je rejoint @squallX tu as oublié un paramètre en instanciant l'objet.

<< si il est dans "www" et non dans "public"... >>, j'avais compris ça, je disais juste de pas mettre le PGR en publique l'adjectif pas public le nom

pour la solution 2, je pense que tu n'a pas compris ce que je voulais dire. Crée une route sur Laravel genre : monsite.fr/my-route-pgr dans cette route place le contenu du fichier PGR et après dans les paramètres ckeditor tu mets juste que le path du pgr est : /my-route-pgr

c'est pas plus compliqué que ça.

Ce path est changeable dans "ckeditor/plugins/pgrfilemanager/plugin.js" ou tu pourrais par exemple remplacer

CKEDITOR.config.filebrowserBrowseUrl = CKEDITOR.basePath+'plugins/pgrfilemanager/PGRFileManager.php'
// par 
CKEDITOR.config.filebrowserBrowseUrl = 'http://monsite.fr/my-route-pgr'

par exemple. ce serait plus propre, après bon si tu veux vraiment pas te prendre la tête enregistre un cookie et voilà, accessible en PHP natif facilement.

normalement là je peux pas faire mieux haha

As-tu fait un var\_dump($\_SESSION); pour voir justement ce qu'il y a dedans ? Car en général les lib de SESSION mettent ça dans des variables perso interne à la lib pour mieux gérer les données.

Ensuite sur laravel il me semble que les SESSIONS sont gérer par un système de fichiers qui leur est propre, donc à priori par avec la variable $_SESSION ce qui expliquerais pourquoi l'index n'existe pas.

Solution 1 : importe le manager de Laravel dans PGRFileManager.php, si tu ne sais pas comment faire https://github.com/phpgearbox/session

Solution 2 : (je te conseil celle là) crée une route sur Laravel et dans cette route appel PGRFileManager.php ou fait ce que tudevais faire dans cette page. Si tu ne veux pas que les gens accèdent à PGRFileManager.php, place le en dehors du "www" ou "public" (je vois pas pourquoi il est dans www___Laravel d'ailleurs à la base)

voilà voilà

stephweb
Auteur

Ok merci.
Ta solution 2 n'est pas bonne je crois.
Car j'avais essayé de placer mon ckeditor (avec tout ces plugins dont PGRFileManager) en dehors du répertoire public, en local ça passais. Mais taleur, en testant le site en ligne, ça ne fonctionnais plu (je ne pouvais plu charger le fichier JS de ckeditor:

<script src="{{ URL_HOST.'/' }}ckeditor/ckeditor.js"></script>

Et dans mon PGRFileManager.php je ne peut pas par exemple faire ceci :

if (!Session::has('usercms')) {
  header('location: 404');
  exit();
}

étant donnée que la façade Session de Laravel n'est pas dans le fichier PGRFileManager.php. Je vais test ta solution 1.

ps: si il est dans "www" et non dans "public", c'est pour le mettre en ligne sur un mutualisé. Car chez OVH faut que le dossier public se nomme "www"

stephweb
Auteur

Pour ta solution 1:
J'ai fait ceci en ligne de commandes :

composer require gears/session:*

Dans mon vendor ça m'a bien ajouté un dossier "gears" qui contient lui meme un dossier "session".

Et je doit bien mettre le code ci-dessous dans mon fichier "PGRFileManager.php" ? :

require '../../../../vendor/autoload.php';

// Create a new gears session.
$session = new Gears\Session();

// Configure the session container
$session->dbConfig = 
[
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => '___laravel',
    'username'  => 'root',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
];

// Install the session api
$session->install();

// Next you will probably want to make the session object global.
$session->globalise();

Car pour le moment ça ne fonctionne pas.
Wamp me retourn des messages d'erreurs:
"Warning: Missing argument 1 for Gears\Session::construct(), called in C:\wamp\www_Laravel\www\ckeditor\plugins\pgrfilemanager\PGRFileManager.php on line 21 and defined in C:\wamp\www___Laravel\vendor\gears\session\src\Session.php on line 135"

Merci.

Le message d'erreur est pourtant clair, tu as oublié de renseigner le paramètre dans le constructeur de Gears\Session

stephweb
Auteur

Ok merci. oui la j'y et fait avec un cookies que je créer lors du logout. Après, je pense qu'il doit y avoir une solution pour faire marcher les SESSION sans obligatoirement passer par les helpers.

il n'y pas vraiment de solution pour les sessions sans inclure la librarie laravel car :

  1. laravel encrypte ses session, si tu n'as pas leur librairie tu ne pourra pas décrypter pour voir les vraies valuers settés
  2. comme dis dans mon premier post, les Session::set('cle', 'valeur') ne sera jamais égale à $_SESSION['cle'] = 'valeur' car ils mettront sûremet une clé remixé style : $_SESSION['laravel_123_cle'] = 'value sûrement encodé';

Une solution est toutefois possible : dans ton script laravel bah tu set une session toi même en PHP et non avec Laravel (ce qui pourrait courcicuité toute fois le framework si tu ne le fait pas bien)

hope this helps.