web-dev-qa-db-ja.com

HTMLフォームのアクション属性に空のURLを使用することをお勧めしますか? (action = "")

空白のHTMLフォームアクションを使用して現在のページにポストバックすることに対して、「ベストプラクティス」応答を提供できる人はいないかと思います。

空のHTMLフォームアクションがここで何をするかを尋ねる投稿 があり、 this one のようないくつかのページはそれが良いことを示唆していますが、人々がどう思うか知りたいです。

264
Matt Mitchell

できる最善のことは、アクション属性を完全に省くことです。省略した場合、フォームはドキュメントのアドレス、つまり同じページに送信されます。

空のままにしておくこともできます。 HTMLのフォーム送信アルゴリズム を実装するブラウザは、ドキュメントのアドレスと同等に処理します。これは主にブラウザが現在どのように動作するかによって行われます。

8. actionを送信者要素の action にします。

9. actionが空の文字列の場合、actionを ドキュメントのアドレス にします。

注:このステップは、RFC 3986の 意図的な違反 であり、ここではベースURL処理が必要です。この違反は、従来のコンテンツとの互換性に対する要望が原因です。 [RFC3986]

これは現在のすべてのブラウザーで確実に機能しますが、一部の古いブラウザーでは期待どおりに動作しない可能性があります( " ブラウザーは空のaction =" "属性で奇妙なことをします ")、これが理由です 仕様は、著者が空のままにすることを強く勧めています

actionおよびformactionコンテンツ属性は、指定される場合、 スペースで潜在的に囲まれた有効な空でないURL の値を持つ必要があります。

256
mercator

実際、現在のHTML5ドラフトの Form Submission subsection では、action=""が許可されていません。それは仕様に反しています。

actionおよびformactionコンテンツ属性は、指定される場合、スペースで囲まれている可能性のある有効なnon-emptyURLの値を持つ必要があります。 (強調を追加)

メルカトルの答え の引用部分は、authorsではなく、implementationsの要件です。著者は著者の要件に従う必要があります。引用するには この仕様の読み方

特に、作成者や作成者が作成するドキュメントなどのプロデューサーに適用される適合要件があり、Webブラウザーなどの消費者に適用される適合要件があります。彼らは何を求めているかで区別できます。生産者の要件は許可されていることを示し、消費者の要件はソフトウェアの動作方法を示しています。

ブラウザは空のaction=""属性で奇妙なことをします 」という理由で、空のURLを許可したHTML4からの変更が行われました。変更の理由を考慮すると、おそらくHTML4でもそれをしないことが最善です。

72
derobert

Action属性を含めない場合、ページは iframe clickjacking 攻撃まで開かれます。これにはいくつかの簡単な手順が含まれます。

  • 攻撃者がページをiframeでラップします
  • Iframe URLには、フォームフィールドと同じ名前のクエリパラメーターが含まれています
  • フォームが送信されると、クエリ値がデータベースに挿入されます
  • ユーザーの識別情報(メール、アドレスなど)が侵害された

参考文献

16
Paul Sweatte

これはHTML5で検証されます。

<form action="#">
15
user152949

HTML 5ではaction="" ISサポートされていませんSOこれをしないでください。悪い練習。

代わりに、アクションを完全に無効にして、デフォルトで同じページに送信する場合、これがベストプラクティスであると思います。

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

Phpを使用してフォームを要約する場合は、次のことを検討してください。 詳細はこちらをご覧ください

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

または、#を使用することもできますが、これはアンカーのように機能し、ページの上部までスクロールします。

<form action="#">
6
Buts

explicitlyフォームが投稿する場所を指定するのが最善だと思います。完全に安全にしたい場合は、フォームと同じURLをaction属性に入力します。フォームを自分自身に送信する場合。メインストリームブラウザは""を同じページに評価しますが、非メインストリームブラウザがそうすることを保証することはできません。

そしてもちろん、ジャドリングのようなGETデータを含むURL全体が指摘しています。

4
Will Morgan

私は通常action = ""を使用します。これはXHTMLで有効であり、GETデータをURLに保持します。

4
Juddling

ただ使う

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

HTML5標準に違反しません。

2
M_R_K

アクション属性をまったく指定しないために使用します。実際、私のフレームワークは、すべてのページが同じアドレスに正確に送信されるように設計されています。しかし、今日私は問題を発見しました。時々、バックグラウンドコールを行うためにアクション属性値を借用します(AJAXと名付けた人もいると思います)。そのため、アクション属性が指定されていない場合、IEはアクション属性値を空のままにしておくことがわかりました。アクション属性が指定されていない場合、対応するJavaScriptは少なくとも未定義でなければならないため、私の理解では少し奇妙です。とにかく、私のポイントは、JavaScriptで属性を使用するかどうかなど、より多くのコンテキストを理解するために必要なベストプラクティスを選択する前です。

1
Singagirl

Classic ASPを使用していたときに、これをよく使用していました。通常、入力に何らかのサーバー側の検証が必要な場合に使用しました(AJAXの時代以前)。私が見る主な欠点は、ファイルレベルで、プレゼンテーションからプログラミングロジックを分離しないことです。

1
busse