<İnput type = "hidden"> öğesinin asıl amacı? [kapalı]


101

<input type="hidden">Etiketin asıl amacını merak ediyorum .

Günümüzde, sunucuya gönderilen değişkenleri ve bunun gibi şeyleri içinde depolamak için genellikle JavaScript ile birlikte kullanılmaktadır.

Bu nedenle, JavaScript'ten önce<input type="hidden"> vardı , öyleyse asıl amacı neydi? Sadece sunucudan istemciye bir tür durumu korumak için geri gönderilen (değişmeden) bir değer göndermeyi hayal edebiliyorum. Ya da geçmişte yanlış bir şey mi anlıyorum ve her zaman JavaScript ile birlikte kullanılması gerekiyordu?<input type="hidden">

Mümkünse lütfen cevaplarınızda da referans veriniz.


3
SO için konu dışı olsa da, durumu sürdürmek de benim seçimim olacak
Phil

POST / GET
StuartLC

1
Mevcut önce JavaScript destekleri nedenlerle onlara sahip olmak daha da (bu soru ima etmek göründüğü gibi olduğunu, bu herhangi bir nedenle değil uzaklaştıran yapar) - hiçbir JavaScript "mağaza değişkenleri" oldu ya da "non gizli" girişteki AJAX veya saplama çağrı bir form gönderilmeden önce alanlar .. normal bir metin girişini gizlemek gibi diğer sapkın hackler için de CSS yoktu.
user2246674

Yanıtlar:


108

Sadece sunucudan istemciye bir tür durumu korumak için geri gönderilen (değişmeden) bir değer göndermeyi hayal edebiliyorum.

Tam. Aslında, bugün hala bu amaç için kullanılıyor çünkü bugün bildiğimiz haliyle HTTP hâlâ, en azından temelde, devletsiz bir protokoldür.

Bu kullanım örneği aslında ilk olarak HTML 3.2'de açıklanmıştır (HTML 2.0'ın böyle bir açıklama içermemesine şaşırdım):

type=hidden
Bu alanlar işlenmemeli ve sunuculara durum bilgilerini bir formla depolamak için bir araç sağlamamalıdır. Bu, form gönderildiğinde ilgili özniteliklerle tanımlanan ad / değer çifti kullanılarak sunucuya geri iletilecektir. Bu, HTTP'nin durumsuzluğuna yönelik bir çözümdür. Diğer bir yaklaşım, HTTP "Çerezler" kullanmaktır.

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

HTML 3.2'nin yalnızca JavaScript'in ilk sürümünden sonra bir W3C Önerisi haline geldiğinden bahsetmeye değer olsa da , gizli alanların hemen hemen her zaman aynı amaca hizmet ettiğini varsaymak güvenlidir.


Verileri depolamak için 'gizli' girdileri kullanmaktan hoşlanmadığım tek şey, verilerin kullanıcılar tarafından manipüle edilebilmesi, verinin, muhtemelen yalnızca HTML'yi anlayan ve geliştirici araçlarıyla nasıl değiştirileceğini anlayan biri, ancak bunun üzerinde kötü etkileri olabileceğidir. Bu değerlerin değiştirilmesi diğer verileri bozarsa veritabanı (örneğin, birincil anahtar referansını depoluyorsanız ve kullanıcı tarafından manuel olarak değiştirilirse).
Brett84c

3
@ Brett84c: Bu yüzden her zaman girişinizi doğrulamalı ve müşteriye asla güvenmemelisiniz;)
BoltClock

Tam olarak, bunu yeni geliştiricilerin olası tehlikelerin farkında olması için ortaya atıyordum.
Brett84c

2
Bu tehlikelerle ilgili hiçbir şey 'gizli' girdilere özgü değildir - müşteriye gönderilen herhangi bir şey geri gelmeden önce manipüle edilebilir. Çerezler veya JS tabanlı alternatifler aynıdır.
FLHerne

10

Burada basit bir Sunucu Tarafı Gerçek Dünya Örneği sunacağım, diyelim ki kayıtlar döngüye alınmışsa ve her kaydın bir silme düğmesi olan bir formu var ve belirli bir kaydı silmeniz gerekiyor, işte hiddenalan iş başında geliyor , yoksa kazandınız ' Bu durumda silinecek kaydın referansını alın,id

Örneğin

<?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
İyi bir örnek, gerçek kod haricinde hazırlanmış ifadeler veya SQL girdisini güvenli bir şekilde işlemek için başka bir yol kullanmalıdır.
Matthew Flaschen

8

Kısacası asıl amaç, formun gönderimi ile birlikte gönderilecek bir alan oluşturmaktı. Bazen, bazı bilgileri gizli alanda (örneğin, kullanıcının kimliği) saklamak ve formun gönderimi ile göndermek gerekiyordu.

HTML 22 Eylül 1995 spesifikasyonundan

`TÜR = GİZLİ 'olan bir GİRİŞ öğesi gizli bir alanı temsil eder. Kullanıcı bu alanla etkileşime girmez; bunun yerine, VALUE özelliği alanın değerini belirtir. NAME ve VALUE özellikleri gereklidir.


1
Lütfen bu yanıtı ayrıntılarıyla açıklayabilir ve / veya bir form gönderildikten sonra bu gizli alanları gönderme davranışına biraz atıfta bulunabilir misiniz?
GitaarLAB

@GitaarLAB, bir örnek verdim (kullanıcı kimliği) ... Neyse, web'de bir çok örnek var. Örneğin echoecho.com/htmlforms07.htm
Chuck Norris

1
Üzgünüm, bana göre satır: original purpose was to make a field which will be submitted *after* form's submitbelirsiz. Şu şekilde yorumlanabilir: 'Form verilerini gönderdikten sonra , gizli alan (gizemli bir yere) gönderilecek' '. Dolayısıyla yukarıdaki yorumum.
GitaarLAB

1
Anladım :) Yorumunuz için teşekkürler, cevabımı düzenledim. Sadece yazım hatasıydı (henüz İngilizce'de guru seviyesine ulaşmadım: D).
Chuck Norris

6

Type = 'hidden' dahil olmak üzere form öğelerinin değerleri, form gönderildiğinde sunucuya gönderilir. input type = "gizli" değerler sayfada görünmez. Örneğin, gizli alanlarda Kullanıcı Kimliklerini korumak, birçok kullanımdan biridir.

SO, olumlu oy tıklaması için gizli bir alan kullanır.

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

Bu değeri kullanarak, sunucu tarafındaki komut dosyası olumlu oyu depolayabilir.


Haha, iyi yakaladın! Ve değerin sonuna bir "x" eklediğimde, yukarı oylama sırasında bir hata oluşuyor: D
Uooo

@Uooo Ve bunu gösterebilir veya doğrudan değeri değiştirebilirsiniz. Değeri farklı bir cevapla değiştirebilirsiniz. Daha sonra olumlu oy düğmesine tıklayabilirsiniz ve farklı bir yanıt için olumlu oy olarak günlüğe kaydedilir. ;)
Geoffrey Hale

5

temelde gizli alanlar daha kullanışlı olacak ve çok adımlı form ile kullanım avantajları olacaktır. gizli kullanarak bir adım bilgisini bir sonraki adıma geçirmek ve son adıma kadar iletmek için gizli alanları kullanabiliriz.

  1. CSRF belirteçleri.

Siteler arası istek sahteciliği çok yaygın bir web sitesi güvenlik açığıdır. Tüm form gönderimlerinde gizli, kullanıcıya özgü belirteç istemek, CSRF saldırılarını önleyecektir, çünkü saldırı siteleri uygun simgenin ne olduğunu tahmin edemeyecek ve kullanıcı adına gerçekleştirdikleri herhangi bir form gönderimi her zaman başarısız olacaktır.

  1. Durumu çok sayfalı formlarda kaydedin.

Kullanıcının çok sayfalı bir formda o anda hangi adımı kaydetmeniz gerekiyorsa, gizli giriş alanlarını kullanın. Kullanıcının bu bilgileri görmesine gerek yoktur, bu nedenle gizli bir giriş alanında saklayın.

Genel kural: Kullanıcının görmesi gerekmeyen ancak form gönderimi sırasında sunucuya göndermek istediğiniz her şeyi depolamak için alanı kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.