web-dev-qa-db-fra.com

Est-ce une bonne pratique d'utiliser une URL vide pour l'attribut d'action d'un formulaire HTML? (action = "")

Je me demande si quelqu'un peut répondre aux "meilleures pratiques" en utilisant des actions de formulaire HTML vierges pour poster sur la page en cours.

Il y a n article demandant ce qu'une action de formulaire HTML vierge fait ici et certaines pages du même genre celle-ci suggèrent que c'est correct, mais j'aimerais savoir ce que les gens en pensent.

264
Matt Mitchell

La meilleure chose à faire est de laisser de côté l'attribut action. Si vous le laissez pas, le formulaire sera envoyé à l'adresse du document, c'est-à-dire à la même page.

Il est également possible de le laisser vide, et tout navigateur implémenté algorithme de soumission de formulaire HTML le traitera comme équivalent à l'adresse du document, ce qui est le cas principalement parce que c'est ainsi que fonctionnent les navigateurs:

8. Soit l'action l'action de l'élément (émetteur) action .

9. Si action est la chaîne vide, laissez l'action l'adresse du document .

Remarque: cette étape est une violation volontaire de la RFC 3986, qui nécessiterait ici un traitement de l'URL de base. Cette violation est motivée par un désir de compatibilité avec le contenu existant. [RFC3986]

Ceci fonctionne certainement dans tous les navigateurs actuels, mais peut ne pas fonctionner comme prévu dans certains navigateurs plus anciens ( " les navigateurs font des choses bizarres avec un attribut action =" "vide " ), c'est pourquoi la spécification décourage fortement les auteurs de la laisser vide :

Les attributs de contenu action et formaction, s'ils sont spécifiés, doivent avoir une valeur qui est un RL non vide valide potentiellement entourée d'espaces .

257
mercator

En réalité, le sous-section de soumission de formulaire du brouillon HTML5 actuel n'autorise pas action="". C'est contre la spécification.

Les attributs de contenu action et formaction, s'ils sont spécifiés, doivent avoir une valeur qui est une URL valide non vide potentiellement entourée par des espaces. (emphase ajoutée)

La section citée dans réponse de mercator est une exigence pour les implémentations de , pas . Les auteurs doivent suivre les exigences de l'auteur. Pour citer Comment lire cette spécification :

En particulier, certaines exigences de conformité s’appliquent aux producteurs, par exemple les auteurs et les documents qu’ils créent, et certaines exigences de conformité s’appliquent aux consommateurs, par exemple aux navigateurs Web. Ils peuvent être distingués par ce qu’ils exigent: une exigence imposée au producteur énonce ce qui est autorisé, tandis qu’une exigence imposée au consommateur énonce la manière dont le logiciel doit agir.

La modification de HTML4 (qui autorisait une URL vide) a été apportée parce que " les navigateurs font des choses étranges avec un attribut action="" vide ". Considérant la raison du changement, il est probablement préférable de ne pas le faire en HTML4 non plus.

72
derobert

Si l’attribut action n’est pas inclus, la page est ouverte jusqu’à détournement de clics iframe , qui implique quelques étapes simples:

  • Un attaquant enveloppe votre page dans un iframe
  • L'URL iframe comprend un paramètre de requête portant le même nom qu'un champ de formulaire.
  • Lorsque le formulaire est soumis, la valeur de la requête est insérée dans la base de données.
  • Les informations d'identification de l'utilisateur (courrier électronique, adresse, etc.) ont été compromises.

Références

16
Paul Sweatte

Cela validera avec HTML5.

<form action="#">
16
user152949

EN HTML 5 action="" IS NON PRIS EN CHARGE SO NE LE FAITES PAS. MAUVAISE PRATIQUE.

Si au lieu de cela vous annulez complètement l'action, il soumettra à la même page par défaut, je pense que c'est la meilleure pratique:

<form>This will submit to the current page</form>

Si vous modifiez le formulaire en utilisant php, vous pouvez envisager les éléments suivants. en savoir plus ici.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Vous pouvez également utiliser # en gardant à l'esprit que cela agira comme une ancre et fera défiler vers le haut de la page.

<form action="#">
7
Buts

Je pense qu'il est préférable de explicitement indiquer où le formulaire est posté. Si vous voulez être totalement sûr, entrez la même URL que le formulaire est dans l'attribut d'action si vous voulez qu'il se renvoie à lui-même. Bien que les navigateurs traditionnels évaluent "" vers la même page, vous ne pouvez pas garantir que les navigateurs non traditionnels le feront.

Et bien sûr, l'URL complète, y compris les données GET telles que Juddling, le souligne.

4
Will Morgan

J'utilise normalement action = "", qui est valide XHTML et conserve les données GET dans l'URL.

4
Juddling

Juste utiliser

?

<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">

Cela ne viole pas les normes HTML5.

2
M_R_K

J'utilise pour ne pas spécifier l'attribut d'action du tout. C'est ainsi que mon cadre est conçu: toutes les pages sont renvoyées exactement à la même adresse. Mais aujourd'hui j'ai découvert le problème. Parfois, j'emprunte une valeur d'attribut d'action pour effectuer un appel en arrière-plan (je suppose que certaines personnes les nomment AJAX). J'ai donc constaté que IE conserve la valeur d'attribut d'action vide si l'attribut d'action n'est pas spécifié. C'est un peu étrange dans ma compréhension, car si aucun attribut d'action n'est spécifié, la contrepartie JavaScript doit être au moins indéfinie. Quoi qu'il en soit, avant de choisir la meilleure pratique, vous devez comprendre plus de contexte, comme vous utiliserez l'attribut en JavaScript ou non.

1
Singagirl

Je le faisais souvent lorsque je travaillais avec Classic ASP. D'habitude, je l'utilisais quand une validation côté serveur était nécessaire pour une entrée (avant AJAX). Le principal inconvénient que je constate est qu’il ne sépare pas la logique de programmation de la présentation, au niveau des fichiers.

1
busse