Sécurisation des valeurs des paramètres envoyés dans les liens href

Petit nouveau ! | 2 Messages

08 févr. 2023, 22:17

Bonjour,

Voici le contexte du problème:
Le DOM peut etre facilement manipulé par l'utilisateur et des paramètres peuvent être récupérés par la méthode GET
J'ai par exemple 2 liens qui dirige chacun vers un article spécifique.

<a href="?page=edit&id=FYKxmv16akXRNt84fTjZ">Edit</a>
<a href="?page=edit&id=cFGx7AYE2h0ae1QVBD93">Edit</a>


Question:
J'ai du mal à voir comment est il possible d'éviter de faire en sorte de prendre l'id du deuxième lien et de le mettre à la place de l'id du premier lien pour être dirigé vers le deuxième article en cliquant sur le premier lien et inversement ?

En vous remerciant d'avance pour votre aide

Chris

Mammouth du PHP | 2703 Messages

08 févr. 2023, 22:30

c'est pas possible.
si un utilisateur doit pouvoir modifier tel id et pas tel autre, alors, il faut mettre un mécanisme en place pour vérifier que tel utilisateur a droit de modifier tel id.

Petit nouveau ! | 2 Messages

08 févr. 2023, 22:52

Ok, merci pour votre réponse rapide et claire. En tant qu'administrateur je dois pouvoir modifier n'importe quel article mais un utilisateur n'ayant pas de rôle admin n'aura pas accès. C'est une remarque que j'ai eu sur mon projet que je suis entrain de développer dans le cadre d'un bootcamp qui vient de se finir, du coup je ne comprends pas la remarque mais votre réponse est très claire, merci

Avatar du membre
Mammouth du PHP | 1564 Messages

12 févr. 2023, 23:32

J'ai du mal à voir comment est il possible d'éviter de faire en sorte de prendre l'id du deuxième lien et de le mettre à la place de l'id du premier lien
Le DOM, ou même directement l'URL peut être modifiée par l'utilisateur, la vérification et la sécurisation se fait via PHP.

Petit nouveau ! | 2 Messages

13 févr. 2023, 17:23

Bonjour,
Cela est tout a fait possible. C'est justement une faille CRSF a éviter. En cliquant sur un lien et en changeant le numéro de l'id, on peut afficher un autre article autre que celui sur lequel on a cliqué. Afficher n'est pas très grave sauf si l'article ne doit pas être visible par tous. Ce qui est plus problématique c'est qu'au lieu d'afficher l'article, on le supprime ( en cliquant sur un lien et en changeant l'id, on pourrait supprimer un autre article ). C'est la qu'intervient le token

Si je fait ceci : http://........../del.php?id=1
Je supprime l'article n°1 ok mais si je met ceci dans une boucle je supprime tous les articles. Et également depuis chez moi, je peux supprimer n'importe quel articles. C'est embêtant.

Alors que si je fait ceci :
http://........../del.php?id=1&jeton=b6cf20590a57f4685c9bdc6c53d12ff8
http://........../del.php?id=2&jeton=9bdf4685c2ffc6c53d190a57b6cf2058

Le jeton est unique pour l'id 1 et unique pour le 2 et là s'ils ne correspondent pas, on bloque.

Petit nouveau ! | 2 Messages

13 févr. 2023, 17:36

D'ailleurs, pour toute suppression d'article, je vous conseille fortement d'utiliser le POST plutot que le GET.
Utilisez un formulaire vide pour les méthode DELETE

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 févr. 2023, 18:17

Le token CRSF c'est pour vérifier la provenance de la requête.

En revanche si je comprends bien la demande initiale, il faut que tu fasses une vérification des droits au chargement de la page.
Si page==edit alors tu dois vérifier que l'utilisateur connecté a bien les droits pour modifier l'article en id.

Ainsi même si un utilisateur change manuellement l'ID par un autre, quand il accède à la page il sera bloqué car il n'aura pas les droits pour charger celle-ci.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1564 Messages

13 févr. 2023, 18:58

Je pense que c'est pas sa question. Il va nous le dire.