2 votes

Est-il dangereux de mettre à la disposition du public l'identifiant des lignes d'une table ?

Donc sur mon site web, j'ai des articles. Les articles peuvent être approuvés ou rejetés.

Dans l'URL d'un article, vous pouvez voir très clairement son ID. Par exemple :

www.website.com/articles/ 14 /Ceci_est_le_titre_de_l'article

Et lorsque vous voulez voter pour ou contre l'article, la demande de publication utilise également l'ID de l'article sans aucun type d'encodage.

Est-ce une mauvaise pratique ou un manque de sécurité ? Si oui, quelle est la meilleure alternative ?

0voto

ficuscr Points 2334

J'ai l'impression qu'il s'agit surtout d'une discussion. Je ne suis pas sûr que cette réponse soit vraiment utile / qu'elle ne soit pas totalement évidente... Mais, en supposant que l'utilisateur doit être authentifié pour voter, vous pourriez faire quelque chose comme ceci :

<?php
$articleId = 123; //these would be coming from $_GET.
$userId = 5001;
$somethingSalty = 'Constofsomesort' . floor(time() / 3600); //or no time aspect if you prefer

if ($articleId === $article->getId() 
         && $n === hash('sha256', $article->getId() . $user->getId() . $somethingSalty)) {...

Et l'URL de votre vote est quelque chose comme :

foo.com/vote?voteDir=1&articleId=123&n=cdc6365e49387cc04c6d2fa661670fb43c5473e0ae46480bf9512a30045b4829   
  • Le lien de vote ne peut pas être partagé.
  • sont uniques par article/utilisateur et ne doivent pas pouvoir être usurpées.
  • Atténue les "attaques par rejeu".

0voto

Milan Vjestica Points 70

Je ne dirais pas que c'est dangereux. Beaucoup de sites utilisent l'ID dans l'URL. Soit dans les requêtes GET ou POST, mais il est également utilisé comme une variable de chemin.

Si vous considérez que le raclage de votre site Web n'est pas sûr, vous pouvez l'appeler ainsi car un utilisateur peut programmer un robot qui va de l'identifiant 0 au dernier identifiant d'utilisateur/de message/de produit et qui racle les données. Mais vous pouvez éviter cela si vous utilisez des identifiants aléatoires. Par exemple, vous utilisez un identifiant différent à six chiffres pour chaque ligne du tableau. Au lieu de mettre vos identifiants dans l'ordre croissant, vous pouvez générer un code aléatoire à six chiffres et le donner à la ligne s'il n'est pas déjà dans la base de données.

Donc, au lieu que les rangées se passent comme ça :

ID    NAME
0     [username]
1     [username]
2     [username]

Vous pouvez les construire comme ceci :

ID      NAME
421456  [username]
197635  [username]
486597  [username]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X