<input type =“ hidden”>の本来の目的は?[閉まっている]


101

<input type="hidden">タグの本来の目的に興味があります。

最近では、JavaScriptと一緒に使用されて、サーバーなどに送信される変数をその中に格納しています。

したがって、JavaScriptの<input type="hidden">存在していたので、その本来の目的は何でしたか?ある種の状態を維持するために(変更されていない)送り返される値をサーバーからクライアントに送信することしか想像できません。それとも、その履歴で何か問題が発生し、常にJavaScriptと一緒に使用されることになっていたのですか?<input type="hidden">

可能であれば、回答にも参考資料を記載してください。


3
状態を維持することも目的外ですが、私の選択となるでしょう
Phil

送信済みフォームPOST / GET
StuartLCに

1
既存の前にはJavaScriptをサポートし、さらにそれらを持ってする理由は(あることを、それがこの質問を暗示するようだと、何らかの理由を損なわない) -そこにはJavaScriptが「ストア変数」になかったか、「非隠された」入力にAJAXやスタブを呼び出しますフォーム送信前のフィールド..通常のテキスト入力を非表示にするなど、他の不正なハッキングのためのCSSもありませんでした。
user2246674 2013

回答:


108

ある種の状態を維持するために(変更されていない)送り返される値をサーバーからクライアントに送信することしか想像できません。

正確に。実際、現在私たちが知っているHTTPは、少なくとも基本的にはステートレスなプロトコルであるため、現在でもこの目的で使用されています。

この使用例は、実際にはHTML 3.2で最初に説明されました(HTML 2.0にそのような説明が含まれていないことに驚いています)。

type=hidden
これらのフィールドはレンダリングされるべきではなく、サーバーがフォームを使用して状態情報を保存する手段を提供する必要があります。これは、対応する属性で定義された名前と値のペアを使用して、フォームが送信されるときにサーバーに返されます。これは、HTTPのステートレス性に対する回避策です。別のアプローチは、HTTP「Cookie」を使用することです。

<input type=hidden name=customerid value="c2415-345-8563">

HTML 3.2がW3C勧告になったのは JavaScriptの最初のリリース後になって初めて言及する価値がありますが、非表示フィールドがほとんど常に同じ目的で機能していたと想定しても安全です。


「隠し」入力を使用してデータを保存することについて私が気に入らない点の1つは、そのデータはユーザーが操作できることです。おそらく、HTMLを理解し、開発ツールを介して変更する方法を知っている人だけですが、これらの値の変更により他のデータが破損した場合のデータベース(たとえば、主キー参照を格納していて、ユーザーが手動で変更した場合)。
Brett84c

3
@ Brett84c:そのため、常に入力を検証し、クライアントを信頼しないでください;)
BoltClock

まさに、私はそれを捨てて、新しい開発者が関与する可能性のある危険を認識できるようにしていました。
Brett84c

2
-それらの危険性については何も「隠れた」入力に特定されていないもの、それが戻ってくる前に、操作することができ、クライアントに送信されます。CookieまたはJSベースの代替はまったく同じです。
FLHerne

10

ここでは、サーバー側の簡単な実世界の例を示します。たとえば、レコードがループしていて、各レコードに削除ボタンのあるフォームがあり、特定のレコードを削除する必要がある場合、hiddenフィールドが動作します。それ以外の場合は、この場合、削除するレコードの参照を取得します。id

例えば

<?php
    if(isset($_POST['delete_action'])) {
        mysqli_query($connection, "DELETE FROM table_name 
                                   WHERE record_id = ".$_POST['row_to_be_deleted']);
                                   //Here is where hidden field value is used
    }

    while(condition) {
?>
    <span><?php echo 'Looped Record Name'; ?>
    <form method="post">
        <input type="hidden" name="row_to_be_deleted" value="<?php echo $record_id; ?>" />
        <input type="submit" name="delete_action" />
    </form>
<?php
    }
?>

1
実際のコードがSQL入力を安全に処理するために準備済みステートメントまたは別の方法を使用する必要があることを除いて、良い例です。
Matthew Flaschen 2014

8

つまり、元々の目的はフォームの送信で送信されるフィールドを作成することでした。場合によっては、いくつかの情報(たとえば、ユーザーのID)を非表示フィールドに格納し、フォームの送信で送信する必要がありました。

HTML 1995年9月22日仕様より

「TYPE = HIDDEN」のINPUT要素は非表示フィールドを表します。ユーザーはこのフィールドを操作しません。代わりに、VALUE属性はフィールドの値を指定します。NAMEおよびVALUE属性は必須です。


1
その回答について詳しく説明していただけますか、および/またはフォームの送信後に非表示フィールドを送信するこの動作についていくつかの参照を提供できますか?
GitaarLAB 2013

@GitaarLAB、私は例(ユーザーID)を与えました...とにかく、Webには多くの例があります。たとえば、echoecho.com / htmlforms07.htm
チャックノリス

1
申し訳ありませんが、original purpose was to make a field which will be submitted *after* form's submitあいまいです。それは次のように解釈できます:「フォームがそのデータを投稿した、非表示のフィールドが(神秘的な場所に)送信されます」。したがって、上記の私のコメント。
GitaarLAB 2013

1
私はそれを得ます:)あなたのコメントをありがとう、私は私の答えを編集しました。スペルミスだった(まだ英語の達人レベルに達していない:D)。
チャックノリス

6

type = 'hidden'を含むフォーム要素の値は、フォームが投稿されるときにサーバーに送信されます。input type = "hidden"値はページに表示されません。たとえば、非表示フィールドでユーザーIDを維持することは、多くの用途の1つです。

SOは非表示フィールドを使用して賛成投票をクリックします。

<input value="16293741" name="postId" type="hidden">

この値を使用して、サーバー側スクリプトは賛成票を保存できます。


ははは、良いキャッチ!そして、値の最後に "x"を追加すると、:Dの投票時にエラーが発生します
Uooo

@Uoooそして、あなたはそれを再表示するか、値を直接変更することができます。値を別の答えに変更できます。その後、[upvote]ボタンをクリックすると、別の回答に対する賛成票として記録されます。;)
ジェフリーヘイル

5

基本的に隠しフィールドは、マルチステップフォームで使用する方が便利であり、利点があります。非表示フィールドを使用して、非表示を使用して1つのステップ情報を次のステップに渡し、最後のステップまで転送し続けることができます。

  1. CSRFトークン。

クロスサイトリクエストフォージェリは、非常に一般的なWebサイトの脆弱性です。攻撃サイトは適切なトークンを推測できず、ユーザーに代わって実行するフォーム送信は常に失敗するため、すべてのフォーム送信で秘密のユーザー固有のトークンを要求すると、CSRF攻撃を防ぐことができます。

  1. 複数ページのフォームに状態を​​保存します。

ユーザーが現在いるマルチページフォームのステップを保存する必要がある場合は、非表示の入力フィールドを使用します。ユーザーはこの情報を見る必要がないため、非表示の入力フィールドで非表示にします。

一般的なルール:このフィールドを使用して、ユーザーが見る必要はないが、フォームの送信時にサーバーに送信するものを格納します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.