Méthode logique de contrôle avant traitement

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 : Méthode logique de contrôle avant traitement

Re: Méthode logique de contrôle avant traitement

par Clair3 » 20 déc. 2015, 18:09

Bonjour,

Vraiment personne :( ?

Re: Méthode logique de contrôle avant traitement

par Clair3 » 16 déc. 2015, 10:53

Bonjour, personne pour répondre à mes petites questions ?

Re: Méthode logique de contrôle avant traitement

par Clair3 » 14 déc. 2015, 23:23

Merci beaucoup je pense que je vais utiliser le site regex101.com.

Vous stockez comment les quotes et caractères spéciaux dans vos bases ? Avec des entités ? C'est ce qui se fait communément ?

Autrement quelle regex peut couvrir l'ensemble des noms, prénoms occidentaux ?

a-zA-Z, si je veux toutes les lettres accentuées + le tiret du 6 et l'apostrophe, j'ai oublié un cas ?

Re: Méthode logique de contrôle avant traitement

par @rthur » 13 déc. 2015, 11:07

Il existe différents flags qui permettent d'adapter les filtres, notamment pour l'encodage des guillemets : http://php.net/manual/fr/filter.filters.sanitize.php

Mais si tu veux quelque chose sur mesure, alors il faut passer par des regex et preg_replace() pour obtenir précisément ce que tu veux. http://php.net/manual/fr/function.preg-replace.php

Re: Méthode logique de contrôle avant traitement

par Clair3 » 13 déc. 2015, 04:51

Bonjour,
Je reviens vers vous pour l'histoire des filtres.
Soit j'ai mal regardé ou alors il y a une limite aux filtres de nettoyage.
Je cherche un filtre var_filter qui garde que les lettres et supprime tout le reste de façon à pouvoir stocker les noms avec des quotes.
Le filtre FILTER_SANITIZE_STRING m'encode les quotes du coup je stocke des entités html dans ma base, pas terrible... c'est ce qui se fait habituellement ?
Et à contrario, il me stocke aussi les guillemets alors que je n'en veux pas...
Clair3

Je suis une couche tard je sais mais client oblige :)

Re: Méthode logique de contrôle avant traitement

par sirakawa » 05 déc. 2015, 13:06

Le filter_var intervient dans le script qui récupére les données.
Il existe aussi un contrôle au moment de la saisie comme expliqué en détail chez http://www.alsacreations.com/tuto/lire/ ... email.html
Il a le mérite d'être au standard HTML 5 et l'inconvénient d'être ignoré par certains navigateurs.
Enfin, on peut mettre là où on le juge utile <input type = "text" name = "par_exemple" required= "required" value ="" />

Re: Méthode logique de contrôle avant traitement

par or 1 » 03 déc. 2015, 13:13

"PDO::exec — Exécute une requête SQL et retourne le nombre de lignes affectées"

on controle
si c'est tout bon, on execute la requete.
si ce n'est pas bon, on avertit l'utilisateur sans rien executer.

Re: Méthode logique de contrôle avant traitement

par Clair3 » 03 déc. 2015, 10:52

Bonjour,

Il y a t-il un moyen de contrôler si l'insert a fonctionné ?

D'un point de vue algorythme/logique comment et où intervient le filter_vars ?

Super le site regex101, merci j'adore !!

Claire

Re: Méthode logique de contrôle avant traitement

par @rthur » 02 déc. 2015, 23:29

Effectivement, il est possible avec bindParam() de préciser le type de données à insérer : numérique, texte, booléen
Mais... c'est tout... :-) il n'y a pas d'autre contrôle sur les caractères précisément attendus ni la longueur

Or si tu veux réellement contrôler tes données (par exemple pour une adresse e-mail, ou dans ton exemple, une suite de 8 chiffres) et afficher un message d'erreur explicite à tes utilisateurs, il faut passer par l'une des solutions évoquées plus haut

Re: Méthode logique de contrôle avant traitement

par Clair3 » 02 déc. 2015, 13:59

Bonjour Arthur,

Merci, quel accueil :)

Je ne connaissais pas tout ça et ça va beaucoup m'aidé.

Apparemment avec PDO il y a moyen de savoir ce qu'on insère ou plutôt ce qui est attendu avec par exemple des PDO::PARAM_INT

Mon idée était de contrôler les infos avec cette méthode et de récupérer si la requête à insérer quelque chose ou non (puisque la requête sera valide et les paramètres bons). Comment faire ce contrôle de "L'ajout a réussi"

Pour faire simple est-ce qu'il y a moyen de savoir, contrôler la valeur de $pdo->execute() , si quelque chose a été inséré, selectionné, supprimé...

Arrêtez-moi si mon raisonnement n'est pas bon ou si ce n'est pas faisable.

Encore merci bonne journée !

Re: Méthode logique de contrôle avant traitement

par @rthur » 02 déc. 2015, 10:16

Bonjour Clair3 et bienvenue sur PHPfrance !
On le fait au moment du if (isset($_POST["submit"])) en mettant une série de conditions ? Avant ? Après ?
Cette commande permet de savoir si un formulaire a été envoyé, par conséquent si tu fais tes tests de validation avant, ils vont se faire même lorsqu'aucune donnée n'aura été envoyé, ce qui n'est pas très utile, il faut donc faire les tests après.

Il est effectivement indispensable de contrôler en PHP les variables qui te sont envoyés par un utilisateur, notamment pour des raisons de sécurité.

Il y a 2 solutions, qui sont complémentaires :
A) PHP dispose notamment de la fonction filter_var() ainsi qu'une liste de filtres prédéfinis pour contrôler les types de variables les plus courantes.
Il existe deux types de filtres :
- des filtres de validation qui vont renvoyer true ou false pour te dire si la variable correspond bien à ce que tu attends.
Par exemple : FILTER_VALIDATE_EMAIL > renverra true si la donnée passée en paramètre ressemble bien à une adresse e-mail, ou false sinon
- des filtres de nettoyage qui vont renvoyer la variable que tu as passé en paramètre débarrassée de tous les caractères qui ne correspondent pas au format que tu attends.

Il y a pas mal d'exemple dans la documentation que je t'encourage à tester pour comprendre le fonctionnement.


B) La 2ème solution, utile si tu veux faire des tests + précis, c'est de passer par des expressions régulières, mais c'est un peu + compliqué à mettre en oeuvre si tu n'as jamais fait de regex.
Voici par exemple ce qu'il faut faire pour vérifier qu'un "numéro d'abonné est bien un nombre sur 8 caractères "
if (preg_match("`[0-9]{8}`i", $numero_abonne) {
     // Numéro d'abonné valide
}else{
     // Numéro d'abonné invalide
}
Rédiger des expressions régulières n'est pas toujours aussi aisé, il y a un site qui est pas mal pour tester : https://regex101.com/r/hX1mD2/1

Méthode logique de contrôle avant traitement

par Clair3 » 02 déc. 2015, 02:21

Bonjour,

Débutante dans le monde du développement, je me lance !

Dans mon formulaire j'ai mis un script pour contrôler la saisie en javascript seulement si on désactive le javascript de son navigateur le contrôle ne se fait plus et c'est là mon interrogation. Comment faire, javascript ou non, pour contrôler côté serveur les données saisies dans mon formulaire.

Exemple : vérifier, côté php, que le numéro d'abonné est bien un nombre sur 8 caractères et que le champ trucmuche est bien renseigné...au final faire ce que faisait le javascript et traiter les erreurs.

On le fait au moment du if (isset($_POST["submit"])) en mettant une série de conditions ? Avant ? Après ?

Je pensais utiliser PDO pour se faire. L'idée c'est de dire si tu es malveillant et que tu n'as pas saisi ce qui est attendu je n'exécute rien et ça renvoie un booléen. J'ai un peu du mal à voir où je dois faire mon contrôle.

Avez-vous un exemple précis ?