¿Es una buena práctica utilizar una URL vacía para el atributo de acción de un formulario HTML? (acción="")
Me pregunto si alguien puede dar una respuesta de "mejores prácticas" sobre el uso de 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 ésta sugieren que está bien, pero me gustaría saber qué piensa la gente.
Lo mejor que puedes hacer es omitir por completo el atributo de acción. Si lo omite, el formulario se enviará a la dirección del documento, es decir, en 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 los navegadores actualmente:
8.
Sea acción la acción del elemento remitente .
9.
Si acción es la cadena vacía, deje que acción sea la dirección del documento .Nota: Este paso es una violación intencionada del RFC 3986, que requeriría el procesamiento de la URL base aquí. Esta infracción está motivada por el deseo de compatibilidad con el contenido heredado. [RFC3986]
Esto definitivamente funciona en todos los navegadores actuales, pero puede no funcionar como se esperaba en algunos navegadores más antiguos ( " los navegadores hacen cosas raras con un atributo action="" vacío " ), razón por la cual la especificación desaconseja encarecidamente a los autores que lo dejen vacío :
Los atributos de contenido
action
yformaction
, si se especifican, deben tener un valor que sea una URL válida, no vacía, potencialmente rodeada de espacios .
En realidad, la subsección Envío de formularios del borrador actual de HTML5 no permite action=""
. Va en contra de las especificaciones.
Los atributos de contenido
action
yformaction
, si se especifican, deben tener un valor que sea una URL válida y no vacía potencialmente rodeada de espacios. (énfasis añadido)
La sección citada en la respuesta de Mercater 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, existen 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, los navegadores web. Se pueden distinguir por lo que exigen: 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 respecto de HTML4, que sí permitía una URL vacía, se realizó porque " los navegadores hacen cosas raras con un action=""
atributo vacío ". Teniendo en cuenta el motivo del cambio, probablemente sea mejor no hacerlo tampoco en HTML4.
No incluir el atributo de acción abre la página a ataques de clickjacking de iframe , que implican unos sencillos pasos:
- Un atacante envuelve su página en un iframe
- La URL del 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 la consulta se inserta en la base de datos.
- Los datos identificativos del usuario (correo electrónico, dirección, etc) se han visto comprometidos.
Referencias
- Eludir las protecciones CSRF con ClickJacking y contaminación de parámetros HTTP
Esto se validará con HTML5.
<form action="#">