8768 sujets

Développement web côté serveur, CMS

Bonjour

je développe un site pour une boutique en ligne. Je ne suis pas expert et je me pose quelques questions...
J'ai développé le site sur une architecture MVC, j'ai une partie "publique" et une partie "administrateur", sécurisées par une session. Je gère certains accès aux données et certaines actions via des scripts js qui appellent via des requêtes ajax des scripts php pour interagir avec la BDD.
J'ai plutôt bien avancé et je viens de me rendre compte que mes scripts js en ajax sont disponibles (visibles, lisibles ...), il est donc tout à fait possible de récupérer les chemins et intitulés de mes fichiers d'action php. Et tous mes répertoires sont accessibles.
Je me pose d'un coup des questions auxquelles je ne trouve pas de réponses qui me rassurent définitivement.
Mon filtrage se fait dans un htaccess qui récupère les différentes variables à renvoyer en GET dans le fichier index.php qui fait appel au routeur

RewriteRule ([a-zA-Z0-9\-]+)_([0-9]+)\.html index.php?page=$1&id=$2 [N]
RewriteRule ([a-zA-Z0-9\-]+)_([0-9]+)_([a-zA-Z0-9]+)\.html index.php?page=$1&id=$2&token=$3 [N]
RewriteRule ([a-zA-Z0-9\-]+)\.html index.php?page=$1 [N]


Le fait d'accéder à tous mes répertoires et fichiers pose-t-il un problème de sécurité (j'imagine que non dans la mesure où ce sont des scripts php donc interprétés sur le serveur mais bon le doute persiste !! ...) ? Cela est-il une bonne pratique et si non on fait comment ?
Je me suis aperçu que si je tape manuellement dans la barre d'adresse monsite.fr/view/accueil.html il accède bien à la page mais a des bugs de chemins (pour les images notamment). Est-ce que je dois remédier à cela (par des chemins d'image qui retourne à la racine /media/images.... ou ce n'est pas un problème puisqu'à priori ce n'est pas un url "valide")...
Est-il possible d’exécuter une requête ajax depuis un autre site (je checke dans mes actions php uniquement si les variables post existent) ?
Bref j'ai quelques suées certainement dues au fait que j'ai beaucoup travaillé sur le projet et que mes connaissances et compétences ne sont pas totales !
le site en développement et démo :
https://www.atelierbio.barbado-webphoto.fr
Merci d'avance pour le temps précieux pris à me répondre et les corrections/indices/avis... que vous pourriez m'apporter.
Modifié par _Lolo (03 Jun 2022 - 11:09)
Salut

Tu pourrais obscurcir ton code JS avec des outils adapté pour (ex : https://obfuscator.io/ )

Tu pourrais également protéger comme cela

$URL = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
if ($URL != "my-domain.com/my-page.php"){
 die("/\*sry, no acces rights\*/");
}
// ton script JS obscurci

Modifié par JENCAL (02 Jun 2022 - 16:12)
Modérateur
Bonsoir,

Tu protèges ton accès à l'administration et pour cela tu as probablement mis en tête de tes fichiers PHP, le script qui va bien pour vérifié que tu es connecté et que tu as le droit d'afficher la page , sinon exit ou retour a la page de log. Cette portion de script devrait être inclue dans tes fichiers PHP de l'admin, pour qu'ils ne soient utilisables que si connecté. De cette façon, même avec une url connue ou trouvable, ils ne seront pas utilisables seuls et surtout si pas les droits de connexion.

Enfin, Les js spécifiques à l'administration devraient-être stockés dans un répertoire différent (pas mélangeage de pinceau front/back, pas de dossiers faciles à découvrir par le front non plus).


Un fichier index.html ou PHP vide, devrait aussi éviter de lister le répertoire.

$_SERVER['HTTP_REFERER'] n'est pas fiable et peut-être modifié par l'utilisateur , s'en méfier pour valider une connexion à l'admin.

Cdt
Modifié par gcyrillus (03 Jun 2022 - 15:15)
Bonsoir,

Ne serait-il pas possible de passer par le routeur ?


  // copie d'un vieux code. Sans "fetch".
  let adresse='receptionAjax.php';
  let value1 = encodeURIComponent(n_);
  let value2 = encodeURIComponent(newg);
  let value3 = encodeURIComponent(sc);
  let parametres="numero="+value1+"&newg="+value2+"&sc="+value3;
  let xhr = new XMLHttpRequest();
  xhr.onreadystatechange=function(){
            if(this.readyState==4 && this.status==200){
                   let response=this.responseText; 
                   let span2 = document.querySelector('#demo');
                    span2.textContent=response;
               }
   }
   xhr.open('POST', adresse, true);
   xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');    
   xhr.send(parametres);


ensuite le routeur recoit "adresseAjax.php" et l'envoie vers le controleur adequate.


  $paths = [
    "/"   => "...Controller",
    "/accueil" => "...Controller",
    "adresseAjax" => "fichierController"
  ]


dans le routeur

public function go($uri)
    {
        require_once 'routes.php' ;

        if(! array_key_exists($uri, $paths)){$uri = "/site";}
        $path = $paths[$uri];

        $controllerPath = '\\Controllers\\'.$path;
        return new $controllerPath();
    }


et dans le fichier ...

  $uri = htmlentities($_SERVER['REQUEST_URI']);
  $routeur = new Routeur\Routeur();
  $controller = $routeur->go($uri);
  $controller->render();

Modifié par alain_47 (02 Jun 2022 - 22:49)
Bonjour
Merci pour vos pistes de réflexion. Effectivement toutes mes pages d'administration ont l'appel au script de vérification d'authentification ad hoc. Je m'aperçois qu'il doit y avoir quelques subtilités dans la mise en pratique de l'architecture MVC (je n'ai pas exactement la même logique que celle décrite ... faudra que je fasse une petite mise à niveau un jour !). Je pense qu'avec les conseils que vous m'avez donné je vais améliorer l'organisation de mes fichiers. Vous n'avez pas hurlé donc à priori pas de grosses erreurs ça me rassure Smiley smile
cordialement
après une bonne nuit de sommeil, un peu de concentration, un peu de réflexion ça y est j'ai retrouvé tous mes petits Smiley smile
je passe donc bien par le routeur, j'ai ajouté dans mon htaccess une règle qui checke les appels ^ajax-([a-z\-]+)\.php index.php?ajax=$1 que je récupère dans l'autoloader qui redirige via le routeur vers la bonne classe ajaxWebsite ou ajaxAdmin avec le bon appel à la bonne méthode Smiley smile j'ai rajouté des fichiers index.php avec un header page-inexistante.html ... du coup plus d'accès aux répertoires (tellement simplissime)
reste plus qu'à réintégrer proprement mes requêtes ajax et intégrer les méthodes correspondantes dans les bons fichiers. Fini les fichiers php de traitement des requêtes ajax qui traînent partout et intégration du petit script d'authentification pour la partie admin !!
Merci beaucoup