it-swarm.com.de

Ist es empfehlenswert, eine leere URL für das Aktionsattribut eines HTML-Formulars zu verwenden? (action = "")

Ich frage mich, ob jemand eine "Best Practices" -Reaktion abgeben kann, wenn er leere HTML-Formularaktionen verwendet, um auf die aktuelle Seite zurückzukehren.

Es gibt ein Beitrag, der fragt, was eine leere HTML-Formularaktion hier macht und einige Seiten wie diese legen nahe, dass es in Ordnung ist, aber ich würde gerne wissen, was die Leute denken.

264
Matt Mitchell

Das Beste, was Sie tun können, ist, das Aktionsattribut ganz wegzulassen. Wenn Sie dies weglassen, wird das Formular an die Adresse des Dokuments gesendet, d. H. An dieselbe Seite.

Es ist auch möglich, es leer zu lassen, und jeder Browser, der HTMLs Formularübermittlungsalgorithmus implementiert, behandelt es als äquivalent zur Adresse des Dokuments.

8. Sei action das action des Submitter-Elements.

9. Wenn action die leere Zeichenfolge ist, sei action die Adresse des Dokuments .

Hinweis: Dieser Schritt ist eine vorsätzliche Verletzung von RFC 3986, die hier eine Verarbeitung der Basis-URL erfordern würde. Dieser Verstoß ist auf den Wunsch nach Kompatibilität mit älteren Inhalten zurückzuführen. [RFC3986]

Dies funktioniert definitiv in allen aktuellen Browsern, funktioniert jedoch möglicherweise nicht wie erwartet in einigen älteren Browsern ( " - Browser tun seltsame Dinge mit einer leeren Aktion =" "attribute " ), weshalb die Spezifikation Autoren davon abhält, es leer zu lassen :

Die Inhaltsattribute action und formaction müssen, falls angegeben, einen Wert haben, der gültige nicht leere URL, möglicherweise umgeben von Leerzeichen ist.

257
mercator

Tatsächlich erlaubt der Unterabschnitt Form Submission des aktuellen HTML5-Entwurfs nicht action="". Es ist gegen die Spezifikation.

Die Inhaltsattribute action und formaction müssen, falls angegeben, einen Wert haben, der eine gültige nicht leere URL ist möglicherweise von Leerzeichen umgeben. (Betonung hinzugefügt)

Der in mercator's answer angegebene Abschnitt ist Voraussetzung für Implementierungen, nicht Autoren. Autoren müssen die Anforderungen des Autors befolgen. Um zu zitieren , wie man diese Spezifikation liest :

Insbesondere gelten für Hersteller Konformitätsanforderungen, z. B. für Autoren und die von ihnen erstellten Dokumente. Für Verbraucher, z. B. für Webbrowser, gelten Konformitätsanforderungen. Sie können anhand der Anforderungen unterschieden werden: Eine Anforderung an einen Hersteller gibt an, was zulässig ist, während eine Anforderung an einen Verbraucher angibt, wie Software zu handeln ist.

Die Änderung von HTML4, die eine leere URL erlaubte, wurde vorgenommen, weil „ Browser seltsame Dinge mit einem leeren action="" attribute ”. In Anbetracht des Grundes für die Änderung ist es wahrscheinlich am besten, dies auch in HTML4 nicht zu tun.

72
derobert

Ohne das Aktionsattribut wird die Seite für Iframe-Clickjacking -Angriffe geöffnet, die einige einfache Schritte umfassen:

  • Ein Angreifer schließt Ihre Seite in einen Iframe ein
  • Die iframe-URL enthält einen Abfrageparameter mit demselben Namen wie ein Formularfeld
  • Beim Absenden des Formulars wird der Abfragewert in die Datenbank eingefügt
  • Die Identifikationsdaten des Benutzers (E-Mail, Adresse usw.) wurden kompromittiert

Referenzen

16
Paul Sweatte

Dies wird mit HTML5 validiert.

<form action="#">
16
user152949

IN HTML 5 action="" IS NICHT UNTERSTÜTZT SO NICHT TUN. SCHLECHTE PRAXIS.

Wenn Sie stattdessen die Aktion komplett negieren, wird sie standardmäßig auf derselben Seite angezeigt. Ich halte dies für die beste Vorgehensweise:

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

Wenn Sie das Formular mit PHP ausfüllen, sollten Sie Folgendes beachten. Lesen Sie mehr darüber hier.

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

Alternativ können Sie # Beachten Sie jedoch, dass dies wie ein Anker wirkt und zum oberen Rand der Seite blättert.

<form action="#">
7
Buts

Ich denke, es ist am besten, explizit anzugeben, wo das Formular veröffentlicht wird. Wenn Sie absolut sicher sein möchten, geben Sie dieselbe URL, unter der sich das Formular befindet, in das Aktionsattribut ein, wenn Sie möchten, dass es an sich selbst zurückgesendet wird. Obwohl Mainstream-Browser "" auf der gleichen Seite können Sie nicht garantieren, dass Nicht-Mainstream-Browser dies tun.

Und natürlich weist die gesamte URL inklusive GET-Daten wie Juddling darauf hin.

4
Will Morgan

Normalerweise verwende ich action = "", was XHTML-gültig ist und die GET-Daten in der URL beibehält.

4
Juddling

Benutz einfach

?

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

Es verstößt nicht gegen HTML5-Standards.

2
M_R_K

Ich benutze, um überhaupt kein Aktionsattribut anzugeben. Es ist tatsächlich so, wie mein Framework aufgebaut ist. Alle Seiten werden exakt an dieselbe Adresse zurückgesendet. Aber heute habe ich ein Problem entdeckt. Manchmal leihe ich mir einen Aktionsattributwert aus, um einen Hintergrundaufruf zu tätigen (ich schätze, manche nennen sie AJAX). Daher stellte ich fest, dass IE ==================================================================================== Jedenfalls ist mein Punkt, bevor Sie sich für die beste Vorgehensweise entscheiden, müssen Sie mehr Kontext verstehen, wie Sie das Attribut in JavaScript verwenden oder nicht.

1
Singagirl

Ich habe das oft gemacht, als ich mit Classic ASP gearbeitet habe. Normalerweise habe ich es verwendet, wenn eine serverseitige Validierung für die Eingabe erforderlich war (vor den Tagen von AJAX). Ich sehe den Hauptnachteil darin, dass die Programmierlogik nicht von der Präsentation auf Dateiebene getrennt wird.

1
busse