Traitement formulaires

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 : Traitement formulaires

par Calimero » 11 oct. 2008, 00:13

Pour m'exprimer sur le sujet de base :

Je pense qu'on ne peut pas conseiller aux débutants de tout faire dans la même page car ça amène à des incompréhensions fondamentales de la manière dont fonctionne une page PHP (un exemple ici). Dans le cadre de ce forum je recommanderais donc de séparer les deux, ce qui oblige le développeur à imaginer séparément l'interface du formulaire et son traitement.

Une fois que ces bases sont acquises, rien n'empêche de tout faire dans la même page (ce que je fais la plupart du temps quand j'ai besoin de développer rapidement, m'évitant une multiplication de fichiers pour un tout petit projet qui ne va pas m'occuper bien longtemps).

Après, les différents contextes dans lesquels on est amené à agir (framework, moteur de templates...) peuvent orienter le choix dans un sens ou dans l'autre sans impact négatif amha.

par savageman » 07 oct. 2008, 03:35

Je pensais que REQUEST_URI était vulnérable tout comme PHP_SELF, je me coucherais moins bête ce soir ! ;)

par sadeq » 07 oct. 2008, 00:58

Effectivement, PHP_SELF ne code pas la partie request de l'url donc il fait passer les injections js par contre REQUEST_URI code les html entities.

par Berzemus » 06 oct. 2008, 18:56

savageman fait sans doute référence à ce billet:
http://blog.developpez.com/julienpauli? ... elf_et_xss

par Cyrano » 06 oct. 2008, 18:15

Moi j'ai un autre argument valable.
Les codes de Cyrano et sadeq présentent une jolie faille XSS ! :D
Tu pourrais élaborer un peu sur le sujet ??

par savageman » 06 oct. 2008, 18:07

Moi j'ai un autre argument valable.
Les codes de Cyrano et sadeq présentent une jolie faille XSS ! :D

par Hywan » 06 oct. 2008, 15:54

Je considère ma méthode un brin plus efficace car elle ne dépend pas de PHP, fonctionne avec toutes les URL, et on a un seul caractère à écrire. J'ai simplement prévenu que pour des réécritures d'URL très très compliquées et mal faites, on est susceptible d'avoir des problèmes. Je l'utilise partout et je n'ai jamais rencontré de soucis :).

par Cyrano » 06 oct. 2008, 07:42

ou alors :
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="monFormulaire"> 
Oui, à condition de n'avoir pas de paramètres à passer dans l'url, ça marche aussi.

par sadeq » 06 oct. 2008, 07:40

ou alors :
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" id="monFormulaire"> 

par Cyrano » 06 oct. 2008, 07:21

Pour un formulaire qui doit pointer sur la page elle-même, ça coûte pas cher de faire :
<form method="post" action="<?php echo($_SERVER['REQUEST_URI']); ?>" id="monFormulaire">
C'est portable quelle que soit l'url, paramètres compris.

par jojolapine » 05 oct. 2008, 23:51

Sinon y a aussi le "?" vous le faite jamais? c'est vrai qu'après ça met les GET en branle pour pas grand chose mais bon...

par Hywan » 05 oct. 2008, 23:45

L'interprétation d'une action vide dépend du navigateur, alors que l'interprétation de l'ancre reste logique face à sa signification de base. Un dièse symbolise une ancre, et si l'ancre est vide (c'est à dire si elle n'est pas suivit d'un identifiant), alors elle désigne l'élément dont elle fait partie. Ceci ne dépend pas de l'interprétation du navigateur mais est standardisé. C'est donc plus cohérent. On aura moins de surprise. À préférer donc :).

par netsupra » 05 oct. 2008, 23:25

Hey :),

Ou sinon, pour ne pas s'em****er avec le nom de la page, on peut écrire :

Code : Tout sélectionner

<form action="#">
L'ancre signifie : la même page. Ça peut poser des soucis si on a des règles de réécriture d'URL mal construites, mais ça ne met jamais arrivé.

Sinon, j'utilise les formulaires dans un contexte MVC, donc j'ai une classe qui représente un formulaire et qui est stockée dans les modèles. Je traite le formulaire dans la couche contrôleur, et je l'affiche dans la vue. Tout simple, on ne se prend pas la tête, c'est un objet, on le trimbale comme on veut :).
Mieux encore, vous pouvez ne rien mettre du tout dans la clause action, comme ca, pas de probleme avec l'url rewriting.

Sinon, a la vue de vos reponses, je vais dorenavant, pour chaque formulaire, creer 2 pages : une contenant le formulaire en html pur, l'autre contenant le bloc de traitement duf ormulaire.
Ces deux pages seront incluses dans la page principale.

Merci,
Netsupra

par Hywan » 05 oct. 2008, 15:12

Hey :),

Ou sinon, pour ne pas s'em****er avec le nom de la page, on peut écrire :

Code : Tout sélectionner

<form action="#">
L'ancre signifie : la même page. Ça peut poser des soucis si on a des règles de réécriture d'URL mal construites, mais ça ne met jamais arrivé.

Sinon, j'utilise les formulaires dans un contexte MVC, donc j'ai une classe qui représente un formulaire et qui est stockée dans les modèles. Je traite le formulaire dans la couche contrôleur, et je l'affiche dans la vue. Tout simple, on ne se prend pas la tête, c'est un objet, on le trimbale comme on veut :).

par sadeq » 04 oct. 2008, 01:49

Ok, pour respecter le standard, on peut mettre dans la clause "action" le nom de la page PHP qui fait l'include() ça fera le même effet.