Question

J'utilise PHP et JavaScript pour créer le site Web de mon père.Il souhaite intégrer un système de connexion à son site Web et j'ai la conception du système utilisant PHP.Mon problème est de savoir comment afficher les boutons si la personne est connectée ?

Par exemple - Tu as Maison, Des produits, À propos de nous, et Contact.Je veux avoir des boutons pour Marchand, Distributeur, et peut-être d'autres informations si l'utilisateur est connecté.J'aurai donc Maison, Des produits, À propos de nous, Contacts, Concessionnaire (si connexion revendeur), Distributeur (si connexion distributeur), et ainsi de suite.

JavaScript serait-il un bon moyen de le faire, ou PHP, ou peut-être même les deux ?Utiliser JavaScript pour afficher et masquer les boutons, et PHP pour vérifier quels boutons afficher.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Était-ce utile?

La solution

Concernant la sécurité, vous ne pouvez pas faire confiance à ce qui vient du client:

  • Le visiteur peut voir tout votre code (HTML et Javascript, pas PHP) et essayer des trucs
  • Le visiteur ne peut même pas utiliser de navigateur ;c'est très simple d'envoyer une requête avec un script

Cela signifie que cacher les boutons est une bonne conception de l'interface utilisateur (car vous ne pouvez pas les utiliser si vous n'êtes pas connecté).Mais ce n'est pas un élément de sécurité.La fonction de sécurité consiste à vérifier, sur le serveur, que le visiteur est connecté avant chaque action qui le nécessite.

Si vous n'avez pas l'intention d'afficher les boutons, il n'est pas utile d'envoyer le HTML et les images au navigateur puis de les masquer avec Javascript.Je vérifierais avec PHP.

Autres conseils

Dans votre fichier de menu ou avec vous, mettez :

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

Ensuite, dans les pages qui nécessitent une authentification, faites ceci :

<?php 
    require 'auth.php';
    require_login();
?>

Où auth.php peut contenir :

<?php
    function loggedin(){
        return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
        if( !loggedin() ){
            header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
            exit;
        }
    }
?>

Si vous utilisez javascript pour masquer les boutons, vous ouvrez une faille de sécurité dans l'application.Un utilisateur malveillant pourrait soit désactiver Javascript, soit en appliquer certains pour contourner votre sécurité.

Je suggère d'utiliser PHP pour choisir de restituer ou non les boutons.Je fais cela assez souvent en .NET.

Vous devriez également pouvoir vérifier l'accès de l'utilisateur côté serveur chaque fois qu'il essaie d'utiliser un bouton restreint.

Ce que nous avons fait dans mon travail, c'est d'avoir une bibliothèque qui fournit des fonctions telles que vérifier si l'utilisateur est connecté.Par exemple:

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

Pour les pages que seuls les utilisateurs authentifiés doivent voir, le contrôleur vérifie s'ils sont connectés et sinon il les redirige vers la page de connexion.

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}

Tout ce qu'a écrit Christian Lescuyer est exact.Notez cependant qu'il a dit « je le ferais » et non « vous devriez ».Le choix n'est pas si simple.

Tout d’abord, la sécurité n’est pas un problème dans le choix.Vous devez effectuer un contrôle de sécurité sur le serveur lorsque vous exécutez une action.Le code qui décide d'afficher/masquer le bouton qui mène à l'action n'a pas d'importance.

Cela ne nous laisse qu'un seul inconvénient de la logique afficher/masquer en Javascript : le code HTML envoyé à l'utilisateur est plus volumineux que nécessaire.Ce n’est peut-être pas grave.

Avoir la logique afficher/masquer en PHP a cependant un inconvénient.Le code PHP requis est généralement un soupe.Le code d'Akira fournit un bon exemple de la façon dont cela se fait habituellement.

Le code Javascript correspondant ressemblerait probablement à ceci :

if (logged())
{
    elementSecretArea.style.display = "list-item";
}

(en supposant que les éléments qui pourraient être masqués ont display:none par défaut).

Ce style permet également un joli scénario "Ajax":l'utilisateur voit une page sans zone secrète, saisit le mot de passe, voit la zone secrète sans actualiser la page.

Donc, si vous disposez déjà d'un script qui s'exécute lors du chargement de votre document pour d'autres raisons, j'envisagerais sérieusement d'y installer une logique d'affichage/masquage.

Fondamentalement, là où vous avez votre menu en HTML, disons sous forme de liste <ul> <li>Home</li> </ul> tu ajoutes php après </li> du dernier élément :

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

<?php  
  }
?> 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top