forms - notas - ¿Es una buena práctica usar una URL vacía para el atributo de acción de un formulario HTML?(acción=“”)
formulario html ejemplo (10)
Me pregunto si alguien puede dar una respuesta de "mejores prácticas" al usar acciones de formulario HTML en blanco para publicar en la página actual.
Hay una publicación que pregunta qué hace una acción de formulario HTML en blanco aquí y algunas páginas como esta sugieren que está bien, pero me gustaría saber qué piensa la gente.
Creo que es mejor indicar explícitamente dónde se publica el formulario. Si desea estar totalmente seguro, ingrese la misma URL en la que se encuentra el formulario en el atributo de acción si desea que se envíe a sí mismo. Aunque los navegadores convencionales evalúan ""
en la misma página, no se puede garantizar que los navegadores no convencionales lo hagan.
Y, por supuesto, la URL completa que incluye datos GET como señala Juddling.
En realidad, la subsección de envío de formulario del borrador actual de HTML5 no permite action=""
. Es contra la especificación.
Los atributos de contenido de
action
yformaction
, si se especifican, deben tener un valor que sea una URL válida y no vacía potencialmente rodeada por espacios. (énfasis añadido)
La sección citada en la respuesta de mercator es un requisito para las implementaciones , no para los autores . Los autores deben seguir los requisitos del autor. Para citar Cómo leer esta especificación :
En particular, hay requisitos de conformidad que se aplican a los productores, por ejemplo, los autores y los documentos que crean, y hay requisitos de conformidad que se aplican a los consumidores, por ejemplo, navegadores web. Se pueden distinguir por lo que requieren: un requisito para un productor establece lo que está permitido, mientras que un requisito para un consumidor establece cómo debe actuar el software.
El cambio de HTML4, que permitía una URL vacía, se realizó porque "los navegadores hacen cosas extrañas con un atributo action=""
vacío ". Teniendo en cuenta el motivo del cambio, probablemente sea mejor no hacerlo en HTML4 tampoco.
Esto se validará con HTML5.
<form action="#">
IN HTML 5 action=""
NO SE APOYA, NO LO HAGA ESTO. MALA PRÁCTICA.
Si, en cambio, niega la acción por completo, se enviará a la misma página de forma predeterminada, creo que esta es la mejor práctica:
<form>This will submit to the current page</form>
Si está agregando el formulario usando php, puede considerar lo siguiente. Lea más sobre esto aquí.
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Alternativamente, puede usar #
tenga en cuenta que esto actuará como un ancla y se desplazará hasta la parte superior de la página.
<form action="#">
Lo mejor que puedes hacer es dejar de lado el atributo de acción por completo. Si lo deja fuera, el formulario se enviará a la dirección del documento, es decir, a la misma página.
También es posible dejarlo vacío, y cualquier navegador que implemente el algoritmo de envío de formularios HTML lo tratará como equivalente a la dirección del documento, lo que hace principalmente porque así es como funcionan actualmente los navegadores:
8.
Deje que la acción sea la acción del elemento action .
9.
Si acción es la cadena vacía, deje que la acción sea la dirección del documento .Nota: este paso es una violación intencional de RFC 3986, que requeriría el procesamiento de URL base aquí. Esta violación está motivada por un deseo de compatibilidad con el contenido heredado. [RFC3986]
Esto definitivamente funciona en todos los navegadores actuales, pero puede que no funcione como se esperaba en algunos navegadores más antiguos ( "los navegadores hacen cosas raras con una acción vacía =" "atributo " ), por lo que la especificación desaconseja a los autores dejarlo vacío :
Los atributos de contenido de
action
yformaction
, si se especifican, deben tener un valor que sea una URL válida y no vacía potencialmente rodeada por espacios .
Normalmente uso action = "", que es XHTML válido y retiene los datos GET en la URL.
Si no se incluye el atributo de acción, la página se abre a los ataques de captura de clics de iframe , lo que implica unos simples pasos:
- Un atacante envuelve tu página en un iframe
- La URL de iframe incluye un parámetro de consulta con el mismo nombre que un campo de formulario
- Cuando se envía el formulario, el valor de consulta se inserta en la base de datos
- La información de identificación del usuario (correo electrónico, dirección, etc.) ha sido comprometida
Referencias
Solía hacer esto mucho cuando trabajaba con ASP clásico. Normalmente lo usaba cuando se necesitaba algún tipo de validación del lado del servidor para la entrada (antes de los días de AJAX). El principal inconveniente que veo es que no separa la lógica de programación de la presentación, en el nivel de archivo.
Solo usa
?
<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">
No viola los estándares HTML5.
Yo uso para no especificar el atributo de acción en absoluto. De hecho, es cómo está diseñado mi marco: todas las páginas se envían de vuelta exactamente a la misma dirección. Pero hoy he descubierto el problema. A veces tomo prestado el valor del atributo de acción para hacer una llamada de fondo (supongo que algunas personas los llaman AJAX). Así que encontré que IE mantiene el valor del atributo de acción como vacío si no se especificara el atributo de acción. En mi opinión, es un poco extraño, ya que si no se especifica un atributo de acción, la contraparte de JavaScript debe estar al menos indefinida. De todos modos, mi punto es antes de elegir la mejor práctica que necesita para comprender más el contexto, por ejemplo, ¿usará el atributo en JavaScript o no?