Vérifier et sécurisé un id

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Vérifier et sécurisé un id

Re: Vérifier et sécurisé un id

par yoann38 » 30 mai 2019, 18:02

Je pense que je suis un peu parano mais vaut mieux sécurisé au max ;)

Re: Vérifier et sécurisé un id

par Saian » 30 mai 2019, 17:15

Ça me parait bien, tu pourrais toujours également vérifier le nom de la catégorie dans ton idée d'avoir une url qui correspond à 100% au contenu.
En revanche il ne s'agit ici pas à proprement parler de sécurité car accéder à un contenu public via une adresse qui ne serait pas la bonne n'est pas en soit une faille de sécurité. ;)

Re: Vérifier et sécurisé un id

par yoann38 » 30 mai 2019, 16:28

J'ai regardé ma page et j'ai rajouté ceci du coup histoire de sécurisé le tout, puis je faire mieux ?
// On récupere tout sur le site en question
	$identifiant_site= (int)$_GET['id_site']; // On vérifie que l'id soit bien un nombre via int
	$sql = $bdd->prepare("SELECT * FROM siteweb  WHERE id_site=:id");
	$sql->bindValue(':id', $identifiant_site, PDO::PARAM_INT);
	$sql->execute();
	$row = $sql->fetch(PDO::FETCH_ASSOC);

	// Si le parametre correspond à la requete en gros
	if ($_GET['nom_site'] != simplification($row['nom_site'])) { echo 'redirection 404'; } else { echo 'on continue le code'; }

Re: Vérifier et sécurisé un id

par yoann38 » 30 mai 2019, 13:19

Oui du coup j'ai opté pour l'option suivante: soit un /
J'ai donc changé l'appel à mes images, css et js bien sur.

Le tout à l'air de fonctionné, je récupére bien les bons parametres:
array (size=3)
'sous_categorie' => string 'plongee' (length=10)
'nom_site' => string 'requin-en-egypte-hurghada' (length=27)
'id_site' => string '17' (length=2)


# Page Fiche.php :
RewriteRule ^fiche-([a-z-]+)/([a-z-]+)-([0-9]+).html$ fiche.php?sous_categorie=$1&nom_site=$2&id_site=$3 [L]

Je vais continuer à chercher comment améliorer le tout et surtout sécurisé l'url

Re: Vérifier et sécurisé un id

par Saian » 30 mai 2019, 11:49

Je crois qu'on a déjà eu cette discussion sur la réécriture et les tirets. Tu ne peux pas utiliser un tiret seul (sans au moins le doubler) en séparateur de variables dans ton expression si tu remplaces les espaces par des tirets dans les valeurs.
Avec ça ([a-z-]+)-([a-z-]+)-([0-9]+), ton premier groupe ([a-z-]+) va prendre tout le texte jusqu'à l'avant avant dernier tiret puis le deuxième groupe prend la dernière chaine de caractères avant le dernier tiret.

Il faut à minima que tu doubles les tirets si tu veux garder le tiret comme séparateur :
^fiche-([a-z-]+)--([a-z-]+)-([0-9]+).html$
/fiche-plongee--avec-les-requins-egypte-17.html

Et comme je te dis plus haut également si dans l'adresse tu as plongee mais que dans la bdd tu as plongée il faut alors que tu transformes le plongée en plongee pour que la comparaison puisse fonctionner.

Re: Vérifier et sécurisé un id

par yoann38 » 30 mai 2019, 10:27

Ca merde quelque part, pour l'url rewting, je viens de vérifier via un vardump $GET

Et je vois par exemple :
array (size=3)
'sous_categorie' => string 'plongée-avec-les-requins' (length=30)
'news' => string 'egypte' (length=7)
'id_site' => string '17' (length=2)

Alors que j'attends normalement
array (size=3)
'sous_categorie' => string 'plongée' (length=30)
'news' => string 'avec-les-requins-egypte' (length=7)
'id_site' => string '17' (length=2)

En bdd j'ai donc
news : avec les requins egypte
sous_categorie: plongée
'id_site' => string '17' (length=2)

htaccess:
# Page Fiche.php :
RewriteRule ^fiche-([a-z-]+)-([a-z-]+)-([0-9]+).html$   fiche.php?sous_categorie=$1&news=$2&id_site=$3 [L]

# -- Redirection en html -------------------
RewriteRule ^fiche.html fiche.php [L]

Re: Vérifier et sécurisé un id

par Saian » 29 mai 2019, 13:13

Le slug ça consiste par exemple à prendre le titre du site et le transformer, classiquement, passer tout en minuscule, remplacer les espaces par des tirets et remplacer les caractères accentués par leurs caractères non accentués. Tu enregistres ce slug au niveau du site et dans les liens au lieu d'utiliser l'id, tu utilises le slug. Lorsque tu recherches le site tu le recherches via son slug.

Mais bon avec ton code tu peux vérifier que $row['nom_site'] est égal à $_GET['nom_site'] en appliquant les modifications nécessaires à $row['nom_site'] si $_GET['nom_site'] est une version modifiée de $row['nom_site'].

EDIT
Pour le slug si tu as une entrée dans siteweb par exemple nom_site = 'Site de saian'
Le slug serait 'site-de-saian'
L'url serait 127.0.0.1/news-souscategorie-site-de-saian.html
La rewrite rule serait RewriteRule ^news-([a-z]+)-([a-z-]+).html$ news.php?sous_categorie=$1&slug=$2 [L]
Et la requête serait SELECT * FROM siteweb WHERE slug=:slug

De cette manière l'utilisateur ne peut pas jouer avec l'id et si il modifie le slug titre dans l'adresse et que celui n'existe pas aucune ligne de la table siteweb ne pourrait être remontée. Impossible dans ce cas d'afficher une page qui ne correspond pas à l'adresse.

Re: Vérifier et sécurisé un id

par yoann38 » 29 mai 2019, 12:58

Salut,
Alors pour ce cas ci, c'est accessible à tous.
Je n'ai pas tout compris quand tu parles de slug.

Puis je améliorer ceci, pour vérfier si id existe par exemple ou autre ?
	// On récupere tout sur le site en question
	$identifiant_site= $_GET['id_site'];
	$sql = $bdd->prepare("SELECT * FROM siteweb  WHERE id_site=:id");
	$sql->bindValue(':id', $identifiant_site, PDO::PARAM_INT);
	$sql->execute();
	$row = $sql->fetch(PDO::FETCH_ASSOC);

# Page Fiche.php :
RewriteRule ^actualites-([a-z-]+)-([a-z-]+)-([0-9]+).html$   actualites.php?sous_categorie=$1&nom_site=$2&id_site=$3 [L]

# -- Redirection en html -------------------
RewriteRule ^fiche.html fiche.php [L]

Re: Vérifier et sécurisé un id

par Saian » 29 mai 2019, 12:15

Salut yoann, en fait s'agit-il d'adresses privées à savoir réservées au membre qui est connecté ou d'adresses publiques à savoir qui, appartenant ou pas à un membre, doivent être accessibles à tous ?

EDIT : dans le premier cas je dirais que c'est pas vraiment important que l'adresse ne corresponde pas à l'id, dans l'autre cas je comprends le désir d'avoir une adresse correcte et dans ce cas, plutôt que d'utiliser l'id, je t'encouragerais plutôt à mettre en place des slugs. Impossible de tricher sur l'adresse comme ça. Sinon oui il faudra que tu vérifies la sous catégorie et le titre pour éventuellement afficher une 404 si l'adresse n'est pas bonne et il faudra donc que tu veilles à ce que ta règle de réécriture fournisse bien les 3 paramètres au script pour pouvoir faire les comparaisons nécessaires.

Et dans le cas où ce seraient des adresses privées (appartenant à un membre et consultables uniquement par lui), c'est surtout de vérifier si l'id du site appartient bien au membre qui est important.

Vérifier et sécurisé un id

par yoann38 » 29 mai 2019, 12:10

Salut tout le monde, voilà j'ai terminé mon projet mais j'aimerais sécurisé le tout,

En fait je viens de faire un test, et changant l'id dans l'url on accéde à une autre entrée de la bdd.
J'aimerais éviter forcément,
j'aimerais savoir si je dois vérifier que l'id correspond également au nom de l'entrée et à la sous catégorie.

Structure de l'url:
127.0.0.1/vano/news-souscategorie-titre-12.html

Coté code je récupere les infos comme ceci sur ma page:
	// On récupere tout sur le site en question
	$identifiant_site= $_GET['id_site'];
	$sql = $bdd->prepare("SELECT * FROM actualites WHERE id_site=:id");
	$sql->bindValue(':id', $identifiant_site, PDO::PARAM_INT);
	$sql->execute();
	$row = $sql->fetch(PDO::FETCH_ASSOC);
dans ma table actualites j'ai une colonne id_site, nom_site, sous_categorie
Merci pour le coup de pouce