2009-08-05 12 views
0

Disons que j'ai un site Web avec des liens vers divers livres sur ma page principale.Sécurité PHP lors du passage de MySQL ID unique via Get

<a href='books.php?id=1'>Book 1</a> 
<a href='books.php?id=2'>Book 2</a> 
<a href='books.php?id=4'>Book 3</a> 

Books 1-3 sont dans mon système, mais id = 3 est en dehors d'une autre catelog que je ne montre pas ou autoriser cette section du site. Donc, si un utilisateur cliquait sur Book 3, puis changeait l'id = 4 en id = 3, il pouvait simplement remonter l'enregistrement (en supposant que je n'ai pas de vérification de session correcte).

Existe-t-il un bon moyen d'obscurcir le get ID que vous passez lorsque vous essayez de tirer un enregistrement spécifique? il semble qu'en passant juste l'id serait facile de demander des pages qui, sans interrogation appropriée et vérification de session, vous pourriez obtenir un autre résultat.

Y a-t-il une meilleure façon de procéder?

Vive

Répondre

1

Vous devez toujours vérifier que l'utilisateur peut accéder à la page. C'est le seul moyen de vérifier que vous ne montrez pas de données erronées, car quelqu'un peut toujours modifier le lien vers lequel il va, même si vous le cachez d'une manière ou d'une autre.

Il est tout simplement impossible de l'échapper. Vous devez toujours vérifier que l'enregistrement est accessible.

0

juste vérifier si id il est permis d'afficher ou non. Avec get, une bonne pratique consiste à vérifier les paramètres que vous pouvez avoir.

1

Vous pourriez probablement utiliser votre ID ou quelque chose en utilisant md5 ou autre pour rendre plus difficile la saisie manuelle, mais ce n'est vraiment pas une bonne idée.

Ce que vous devez faire est d'implémenter la sécurité côté serveur dans votre script books.php qui empêchera les utilisateurs d'accéder sans autorisation. C'est la seule chose qui assurera la sécurité de votre site.

0

que penser tout haut:

  1. vous pouvez faire une colonne dans votre table mysql livre en disant "visible" ... ou userlevel dans vos tables utilisateurs.
  2. faire fonction php ou instruction if que:

    if (user is not in user_level) // user is not allowed to see everything 
    { 
        redirect to previous page; 
    } 
    else if (user is in user_level) // user is allowed to see everything 
    {   
        display all items; 
    } 
    
0

Vous devez certainement vérifier si l'utilisateur est autorisé à afficher la page.
Mais, et si vous sépariez les identifiants pour les différents catalogues? Les URL pourraient ressembler à books.php? Cat = foo & id = 1. Cela ne rendrait pas nécessairement les choses plus sûres, mais cela empêcherait les gens de trouver accidentellement les mauvaises pages et d'organiser les choses un peu mieux.