Otomatik Doldurma Koyu Modeli
Yayınlanan: 2022-03-10Bir gazete kayıt formunda ad, e-posta ve şifre alanları vardı. Böylece ad alanına yazmaya başladım ve otomatik doldurma profilimi önerdi. Ama korkak bir şey vardı. Otomatik tamamlama önerisi, posta adresimi içeriyordu. Söylemeye gerek yok, şaşırtıcıydı: adres, formda bir alan değildi. Hatta neden önerildi?
Bu soru kafamda oluşmaya başladığında beynim parmağıma öneriye tıklamam için işaret vermişti ve iş bitmişti. Daha sonra, adres, telefon, doğum tarihi vb. gibi ek bilgiler isteyen ikinci bir form sayfasına yönlendirildim. Ve tüm bu alanlar da otomatik doldurma işlevi tarafından önceden doldurulmuştu.
Rahat bir nefes aldım. Bu, web sitesinin bir hilesi değil, "çok aşamalı" bir formdu. Ne de olsa saygın bir gazeteydi. İkinci sayfadaki tüm isteğe bağlı bilgileri sildim, kaydı tamamladım ve devam ettim.
Bu (sorunlu) etkileşim , otomatik tamamlama özelliklerini kullanmanın risklerinden birini vurguladı.
Otomatik Tamamlama ve Otomatik Doldurma
Kulağa benzer gelebilir, ancak autocomplete
ve otomatik doldurma aynı şey değildir . Yakından ilişkili olmalarına rağmen:
- Otomatik doldurma, kişilerin bilgileri (tarayıcıda veya işletim sisteminde) kaydetmesine ve web formlarında kullanmasına olanak tanıyan bir tarayıcı özelliğidir.
-
autocomplete
, tarayıcıya bir web formundaki alanların nasıl otomatik doldurulacağına (veya doldurulmayacağına) ilişkin yönergeler sağlayan bir HTML özelliğidir.
Otomatik doldurmanın "ne" olduğunu söyleyebiliriz, "nasıl" otomatik tamamlama ise, yani autofill
verileri depolar ve bir web formunda (alanların name
, type
veya id
göre) eşleştirmeye çalışır ve autocomplete
tarayıcıyı yönlendirir. nasıl yapılacağı hakkında (her alanda hangi bilgilerin beklendiği).
Otomatik tamamlama, birçok farklı değer türünü belirlemeye olanak tanıyan birçok seçeneğe sahip güçlü bir özelliktir:
- Kişisel : İsim, adres, telefon, doğum tarihi;
- Finansal : kredi kartı numarası, adı, son kullanma tarihi;
- Demografi : yer, yaş, cinsiyet, dil;
- Profesyonel : şirket ve iş unvanı.
Otomatik Doldurma, tercihe bağlı olarak veya tesadüfen yaygın bir özelliktir: tarayıcının bilerek veya yanlışlıkla web formu bilgilerini kaydetmesine/kullanmasına izin vermeyi kim kabul etmemiştir? Ve bu bir sorun olabilir - özellikle autocomplete
kötü kullanımıyla (ve günümüzde eklenen aşırı sayıda kimlik avı e-postası ve SMS mesajıyla birlikte).
Gizlilik Riskleri
Bu özelliklerin her ikisi de (en az) kullanıcı için, hem kişisel verileri hem de gizliliği ile ilgili iki ana risk sunar:
- Görünmeyen alanlar doldurulur (bu, gizli türdeki alanlarla aynı değildir);
- Otomatik tamamlanan bilgiler, kullanıcı formu göndermeden önce bile JavaScript aracılığıyla okunabilir .
Bu, bir kullanıcı bilgileri otomatik olarak doldurmayı seçtiğinde, geliştiricinin okuması için tüm alanların kullanılabilir olacağı anlamına gelir. Yine, kullanıcının formu gönderip göndermediğinden bağımsız olarak, kullanıcı gerçekte hangi alanların doldurulduğunu bilmeden.
Bu son kısım görecelidir: hangi alanların doldurulduğunu bilmek tarayıcıya bağlı olacaktır. Safari ve Firefox bu konuda iyi bir iş çıkarıyor (yakında aşağıda göreceğimiz gibi). Öte yandan, şu anda en popüler tarayıcı olan Chrome, en bilgili kullanıcıları bile kişisel bilgilerini paylaşmaları için kandırabilecek kötü bir deneyim sunuyor.
Kullanıcının yanlışlıkla alanları doldurmayı seçtiği zamanları da göz önünde bulundurursak, bu sorun daha alakalı hale gelir. Bir örnekle daha ayrıntılı olarak kontrol edelim.
Küçük Bir Deney
Birçok alan içeren bir form oluşturarak ve autocomplete
özelliğini farklı değerlerle ekleyerek küçük bir deney yaptım. Sonra formun yapısıyla biraz oynadım:
- Alanların çoğunu ekran dışı bir kapsayıcıya koyarak sakladım (
hidden
veyatype="hidden"
kullanmak yerine); - Görsel olarak gizli alanları sekme sırasından kaldırdım (böylece klavye kullanıcıları gizli alanları gözden kaçıracaktı);
- Alanları farklı bir sırayla sıralamayı denedim (ve benim için sürpriz oldu, bu otomatik doldurmayı etkiledi!).
Sonunda, formun kodu şöyle görünüyordu:
<form method="post" action="javascript:alertData()"> <label for="name">Full name</label><input name="name" autocomplete="name" /><br/> <label for="email">Email</label><input name="email"/><br/> <label for="postal-code">ZIP</label><input name="postal-code" autocomplete="postal-code"/> <div class="hide-this"> <!-- Hidden --> <label for="firstname">First name</label><input tabindex="-1" type="hidden" name="firstname" autocomplete="given-name" /><br/> <label for="lastname">Last name</label><input tabindex="-1" name="lastname" autocomplete="family-name" /><br/> <label for="honorific-prefix">honorific-prefix</label><input tabindex="-1" name="honorific-prefix" autocomplete="honorific-prefix"/><br/> <label for="organization">Organization</label><input tabindex="-1" name="organization" /><br/> <label for="phone">Phone</label><input tabindex="-1" name="phone" autocomplete="tel" /><br/> <label for="address">address</label><input tabindex="-1" name="address" autocomplete="street-address" /><br/> <label for="city">City</label><input tabindex="-1" name="city" autocomplete="address-level2" /><br/> <label for="state">State</label><input tabindex="-1" name="state" autocomplete="address-level1" /><br/> <label for="level3">Level3</label><input tabindex="-1" name="state" autocomplete="address-level3" /><br/> <label for="level4">Level4</label><input tabindex="-1" name="state" autocomplete="address-level4" /><br/> <label for="country">Country</label><input tabindex="-1" name="country" autocomplete="country" /><br/> <label for="birthday">Birthday</label><input tabindex="-1" name="birthday" autocomplete="bday" /><br/> <label for="language">Language</label><input tabindex="-1" name="language" autocomplete="language" /><br/> <label for="sex">Sex</label><input tabindex="-1" name="sex" autocomplete="sex" /><br/> <label for="url">URL</label><input tabindex="-1" name="url" autocomplete="url" /><br/> <label for="photo">Photo</label><input tabindex="-1" name="photo" autocomplete="photo" /><br/> <label for="impp">IMPP</label><input tabindex="-1" name="impp" autocomplete="impp" /><br/> <label for="username">Username</label><input tabindex="-1" name="username" autocomplete="username" /><br/> <label for="password">Password</label><input tabindex="-1" name="password" autocomplete="password" /><br/> <label for="new-password">Password New</label><input tabindex="-1" name="new-password" autocomplete="new-password" /><br/> <label for="current-password">Password Current</label><input tabindex="-1" name="current-password" autocomplete="current-password" /><br/> <label for="cc">CC#</label><input tabindex="-1" name="cc" autocomplete="cc-number" /><br/> <label for="cc-name">CC Name</label><input tabindex="-1" name="cc-name" autocomplete="cc-name" /><br/> <label for="cc-expiration">CC expiration</label><input tabindex="-1" name="cc-expiration" autocomplete="cc-expiration" /><br/> <label for="cc-zipcode">CC Zipcode</label><input tabindex="-1" name="cc-zipcode" autocomplete="cc-postalcode" /><br/> </div> <button>Submit</button> </form>
Not: Bu demoyu bir süre önce oluşturdum ve standart, yaşayan bir belgedir. O zamandan beri, otomatik tamamlama adlarından bazıları değişti. Örneğin, artık adres veya kredi kartı için daha önce mevcut olmayan new-password
ve current-password
veya daha fazla ayrıntı belirtebiliriz.
Bu formda üç görünür alan vardı ( name
, email
ve zipcode
). Bu form sigorta şirketleri, kablo ve diğer hizmet sağlayıcılar arasında yaygın olsa da, çok yaygın olmayabilir, bu yüzden formu tek bir e-posta alanıyla daha da küçülttüm. Web sitelerine, haber bültenlerine veya güncellemelere kaydolmanın her yerde olduğunu görüyoruz. Çalışan bir demoyu burada görebilirsiniz:
Formu doldurmak için otomatik tamamlamayı kullandıysanız, zaten istediğinizden daha fazla bilgi paylaştınız ( endişelenmeyin, hepsi yereldir ve benimle paylaşılmaz ). Ve Chrome'da tamamen normal bir abonelik formu gibi görünebilirdi.
Otomatik doldurmaya sahip değilseniz/kullanmıyorsanız endişelenmeyin. Üç farklı tarayıcıda deneyimin nasıl olduğunun bir özetini burada bulabilirsiniz.
Not : Tüm bu testler Otomatik Doldurma'nın kullanıldığını varsaymaktadır ve sahte bir profile dayanmaktadır!
Safari
Bir form denetimine tıkladığınızda, Safari, alanın sağ tarafında bir simge gösterecektir. Üzerine tıklamak, tarayıcının formla paylaşacağı bilgileri içeren bir açılır pencere gösterecektir:
İyi bir şey: formun bir parçası olarak paylaşılacak tüm verileri görüntüler. Yalnızca görünen alanlar için veriler değil, tümü. Bu noktada, kullanıcı bir şeylerin yolunda gitmediğinden şüphelenebilir. Balık gibi bir şey var.
Formu yalnızca e-posta alanına indirdiğimde Safari ilginç bir şey yaptı. Otomatik doldurma açılır penceresi farklıydı:
Yalnızca e-postayı paylaşacağını belirtir (ve yalnızca bu bilgiyi paylaşır). Ancak aşağıdaki iletişim bilgileri daha yanıltıcı olabilir. O butona tıkladığımızda tarayıcı, paylaşılan verileriyle birlikte profilin bir özetini gösteriyor. Ama bu hiçbir yerde net olarak belirtilmiyor. Bazı "paylaş/paylaşma" seçeneklerine sahip normal bir kişi kartına benziyor. “Otomatik Doldur” düğmesine tıkladıktan sonra, form tüm verilerle doldurulur. Yalnızca e-posta değil:
Bu nedenle, bir kullanıcının yanlışlıkla formla bilgi paylaşmasının bir yolu vardır. İki olası seçenek arasından bir simgeyle “vurgulanan” olduğu düşünülürse, zor ama çok zorlayıcı değil.
Komik olan şey, tarayıcılar kişisel verileri kredi kartı verilerinden ayırır, ancak Safari kredi kartı bilgilerinin bir kısmını kişisel verilere (ad ve posta kodu) dayalı olarak doldurdu.
Firefox
Firefox'ta otomatik doldurmayı kullanmak biraz daha karmaşıktır. Chrome'daki gibi otomatik değildir ve Safari'deki gibi bir simge yoktur. Kullanıcıların, yalnızca görünen alanları değil, tarayıcının dolduracağı her kategoriyle ilgili bir notun bulunduğu otomatik doldurma açılır penceresini görmek için yazmaya başlamaları veya ikinci kez tıklamaları gerekir:
Yalnızca e-posta formuyla test eden Firefox, hangi alan kategorilerini dolduracağını belirten aynı otomatik doldurma açılır penceresini sundu. Hiçbir fark yok.
Ve diğer tarayıcılarda olduğu gibi, otomatik doldurma çalıştırıldıktan sonra tüm değerleri JavaScript ile okuyabiliyorduk.
Firefox üçünün en iyisiydi: Alanlardan veya sıralarından bağımsız olarak formla hangi bilgilerin paylaşılacağını açıkça belirtti. Ve ikinci bir kullanıcı etkileşimi gerçekleştiğinde otomatik doldurma işlevini gizledi .
Bir klavye kullanıcısı, açılır balonun içine girip sekme tuşuna basarak farkında olmadan otomatik doldurmayı seçebilir.
Krom
Sonra sıra Chrome'a geldi. (Burada "Chrome" kullanıyorum, ancak sonuçlar test edilen birkaç Chromium tabanlı tarayıcı için benzerdi.) Alanı tıkladım ve daha fazla etkileşim olmadan otomatik doldurma açılır penceresi göründü. Firefox ve Safari'nin birçok ortak noktası olsa da, Chrome tamamen farklıdır: yalnızca iki değeri gösterir ve her ikisi de görünür.
Bu ekran tasarım gereğiydi. Görünür kontrollerin ve otomatik tamamlama önerilerinin belirli bir kombinasyonunu elde etmek için alanların sırasını bilerek seçtim. Ancak, Chrome, ikinci değer için bazı otomatik tamamlama özelliklerine daha fazla "ağırlık" veriyor gibi görünüyor. Bu da formdaki alanların sırasına bağlı olarak açılır pencerenin değişmesine neden olur.
Formun ikinci versiyonuyla test yapmak çok daha iyi değildi:
Açılır pencerede görünmeyen bir alan (ad) gösterilirken, açılır pencerede adın amacının ne olduğu belirsizdir. Deneyimli bir kullanıcı, ad paylaşıldığından bunun olduğunu anlayabilir, ancak ortalama bir kullanıcı (ve hatta deneyimli olanlar), e-postanın bu adla profille ilişkili olduğunu düşünebilir. Tarayıcının formla paylaşacağı verilere dair sıfır gösterge var.
Kullanıcı otomatik doldurma düğmesine tıkladığında, veriler geliştiricinin JavaScript ile okuması için hazır olur:
Chrome en kötü suçluydu: bilgileri otomatik olarak paylaştı, hangi verilerin dahil olduğu belirsizdi ve otomatik doldurma önerileri kontrollerin sırasına ve özelliklerine göre değişti.
İlk iki sorun, tüm/birçok tarayıcı için ortaktır, hatta bir özellik olarak bile kabul edilebilir. Bununla birlikte, üçüncü sayı Chromium tarayıcılarına özeldir ve kabataslak bir karanlık deseni kolaylaştırır.
Bu davranış, Chrome'un çevrimiçi tarayıcıların önemli bir pazar payını alması (Chrome ve Chromium tabanlı dahil) olmadığı için bir sorun değil, daha çok bir anekdot olacaktır.
Karanlık Desen
Muhtemelen bildiğiniz gibi, karanlık bir kalıp , kullanıcıları gerçekten yapmak istemeyebilecekleri şeyleri yapmaları için kandıran aldatıcı bir UX kalıbıdır.
"Web sitelerini ve uygulamaları kullandığınızda, her sayfadaki her kelimeyi okumazsınız - okumaya göz gezdirir ve varsayımlarda bulunursunuz. Bir şirket sizi bir şey yapmanız için kandırmak isterse, aslında başka bir şey söylerken bir sayfanın bir şey söylüyormuş gibi görünmesini sağlayarak bundan yararlanabilir.”
- Harry Brignull, darkpatterns.org
Önceki noktalarda açıklanan davranış, açıkça aldatıcı bir kullanıcı deneyimidir. Deneyimsiz kullanıcılar kişisel verilerini paylaştıklarını fark etmeyeceklerdir. Chrome, hangi bilgilerin paylaşıldığını açıkça belirtmek yerine, seçilen seçeneğin bir profile aitmiş gibi görünmesini sağladığından, teknoloji konusunda bilgili daha da fazla kişi tarafından kandırılabilir.
Tarayıcı uygulamaları bu davranışa neden olur, ancak geliştiricinin bundan yararlanmak için onu ayarlamasını gerektirir. Ne yazık ki, şimdiden onu istismar etmeye istekli ve potansiyel müşteri elde etmek için bir özellik olarak satan şirketler var.
Karanlık bir desen gittiği sürece, yasadışı da olabilir. Bunun nedeni, Avrupa Genel Veri Koruma Yönetmeliği'nin (GDPR) 5. maddesinde belirtilen kişisel verilerin işlenmesine ilişkin birçok ilkeyi ihlal etmesidir:
- Yasallık, adalet ve şeffaflık
Süreç tamamen şeffaf. - Amaç sınırlaması
Veriler, başlangıçtaki amaca uygun olmayan bir şekilde işlenir. - Veri minimizasyonu
Tam tersi. Veri maksimizasyonu: mümkün olduğunca fazla bilgi edinin.
Örneğin, bir haber bültenine kaydolmak veya bir ürün hakkında bilgi talep etmek istiyorsanız ve e-posta adresinizi verirseniz, web sitesinin adınızı, adresinizi, doğum tarihinizi, telefon numaranızı veya başka herhangi bir şeyi bilginiz olmadan almaya yasal hakkı yoktur. rıza veya bilgi. Kullanıcının otomatik doldurmaya tıkladığında izin verdiğini düşünseniz bile, elde edilen verilerin amacı, formun asıl amacı ile uyuşmamaktadır.
Olası çözümler
Sorunu önlemek için tüm aktörlerin katkıda bulunması ve sorunun çözülmesine yardımcı olması gerekir:
- Kullanıcılar
- Geliştiriciler ve tasarımcılar
- tarayıcılar
1. Kullanıcılar
Kullanıcı tarafındaki tek şey , otomatik doldurma açılır penceresinde görüntülenen verilerin doğru olduğundan emin olmaktır.
Ancak burada mağdurun kullanıcı olduğunu unutmamamız gerekiyor. Otomatik doldurmaya tıklarken yeterince dikkat etmedikleri için onları suçlayabiliriz , ancak bu haksızlık olur. Ayrıca, bir kişinin yanlışlıkla düğmeyi tıklayıp verilerini kazara paylaşabilmesinin birçok nedeni vardır. Bu nedenle, iyi niyetli ve bilgili kullanıcılar bile buna kanabilir.
2. Geliştiriciler ve Tasarımcılar
Dürüst olalım. Geliştiriciler, sorunun temel nedeni olmasa da, karanlık kalıptan yararlanmada önemli bir rol oynarlar. Ya yanlışlıkla ya da kötü niyetle.
Ve sorumlu ve dürüst olalım (bu sefer kelimenin tam anlamıyla), çünkü geliştiricilerin ve tasarımcıların güven oluşturmak ve otomatik doldurma ve otomatik tamamlama özelliklerinden iyi bir şekilde yararlanmak için yapabilecekleri şey budur:
- Yalnızca ihtiyacınız olan verileri otomatik olarak tamamlayın.
- Hangi verilerin toplanacağını açıkça belirtin.
- Daha sonra gönderilecek form alanlarını gizlemeyin.
- Kullanıcıları daha fazla veri göndermeleri için yanlış yönlendirmeyin veya kandırmayın.
Aşırı bir önlem olarak, belirli alanları otomatik olarak tamamlamaktan kaçınmayı deneyebilirsiniz. Ama tabii ki bu, formu daha az kullanılabilir ve erişilebilir kılacağı için başka sorunları da beraberinde getiriyor. Bu yüzden bir denge bulmak zor olabilir.
Bütün bunlar, karanlık desenden yararlanabilecek bir XSS güvenlik açığı olasılığını düşünmeden. Tabii ki, bu tamamen farklı bir hikaye ve daha da önemli bir sorun olurdu.
3. Tarayıcılar
İşin çoğunun tarayıcı tarafından yapılması gerekir (özellikle Chromium tarafında). Ancak, web tarayıcılarının otomatik doldurma/otomatik tamamlamayı nasıl ele aldığı konusunda her şeyin kötü olmadığını belirterek başlayayım. Birçok şey iyidir. Örneğin:
- Paylaşılabilecek verileri sınırlarlar
Tarayıcılar, HTML standardında açıklanan tüm değerleri içermeyebilecek otomatik tamamlama için bir alan listesine sahiptir. - Verileri kapsüller ve gruplandırırlar
Tarayıcılar, kredi kartları gibi kritik değerleri korumak için kişisel ve finansal bilgileri ayırır. Safari'nin bununla ilgili bazı sorunları vardı, ancak küçüktü. - Paylaşılacak veriler hakkında uyarıyorlar
Bazen bu eksik (Chrome) veya net değil (Safari) olabilir, ancak kullanıcıyı uyarır.
Yine de, bazı şeyler web tarayıcılarının çoğu veya tamamı tarafından geliştirilebilir.
Otomatik Olarak Tamamlanacak Tüm Alanları Göster
Tarayıcılar, otomatik doldurma açılır penceresinde her zaman otomatik olarak doldurulacak tüm alanların bir listesini göstermelidir (yalnızca kısmi bir liste yerine). yanıltıcı olabilir.
Firefox bu noktada mükemmel bir iş çıkardı, Safari genel olarak iyi bir iş çıkardı ve Chrome diğer ikisine kıyasla ortalamanın altındaydı.
Otomatik Doldurmada onChange
Olayını Tetiklemeyin
Bu, sorunlu bir istek olur çünkü bu davranış, HTML standardındaki Otomatik Doldurma tanımının bir parçasıdır:
"Otomatik tamamlama mekanizması, kullanıcı kontrol verilerini değiştirmiş gibi davranan kullanıcı aracısı tarafından uygulanmalıdır [...]."
Bu, tarayıcıların otomatik olarak tamamlanan verilere kullanıcı tarafından girilmiş gibi davranması gerektiği anlamına gelir, böylece tüm olayları tetikler, değerleri gösterir, vb. Görsel olarak uygun olmayan bir alanda bile.
Görünmeyen öğelerde bu davranışı önlemek sorunu çözebilir. Ancak bir form denetiminin görünür olup olmadığını doğrulamak tarayıcı için maliyetli olabilir. Ayrıca, bu çözüm yalnızca kısmidir çünkü geliştiriciler, olayları tetikleyen girdiler olmadan bile değerleri okuyabilir.
Geliştiricilerin Göndermeden Önce Otomatik Tamamlanan Alanları Okumasına İzin Vermeyin
Bu aynı zamanda sorunlu olacaktır çünkü birçok geliştirici genellikle değerleri doğrulamak için göndermeden önce alan değerlerini okumaya güvenir (örneğin, kullanıcı girdilerden uzaklaştığında). Ancak bu mantıklı olacaktır: kullanıcı bilgiyi paylaşmak istemez. formu gönderene kadar, tarayıcının da yapmaması gerekir.
Buna bir alternatif, otomatik tamamlanan değerleri okurken sahte veriler sağlamak olabilir. Web tarayıcıları, ziyaret edilen bağlantılarla zaten böyle bir şey yapıyor, neden otomatik olarak doldurulmuş form alanları için de aynısını yapmıyorsunuz? Ad olarak anlamsız bir ifade, kullanıcının adresi yerine yerel yetkililerle eşleşen geçerli bir adres, sahte bir telefon numarası sağlayın? Bu, kullanıcının kişisel bilgilerini korurken geliştirici doğrulama ihtiyaçlarını çözebilir.
Tarayıcının formla açıkça paylaşacağı alanların/değerlerin tam listesini görüntülemek, ileriye doğru atılmış büyük bir adım olacaktır. Diğer ikisi ideal ama daha çok esneme hedefleri. Yine de, gizliliği önemli ölçüde artıracak girişimlerdir.
Otomatik doldurma koyu deseninden yararlanmak hala mümkün olabilir mi? Maalesef evet. Ama çok daha karmaşık olurdu. Ve bu noktada böyle bir durumdan kaçınmak kullanıcının sorumluluğu ve geliştiricinin görevi olacaktır.
Çözüm
Bilgileri seçmek için kullanıcı etkileşimi gerektirdiğinden, otomatik tamamlamanın (Chrome'da bile) büyük bir güvenlik sorunu olmadığını söyleyebiliriz. Bununla birlikte, potansiyel veri kaybının uygun eylemi haklı çıkardığını da iddia edebiliriz. Ve Chrome (nispeten) daha az önemli güvenlik/kullanılabilirlik endişeleri için (bkz. alert()
, prompt()
ve confirm()
önemli kişisel bilgileri korumak için yapılabileceklerden daha fazla değişiklik yaptı.
O zaman karanlık desen sorunumuz var. Herkes üzerine düşeni yaparsa bundan kaçınılabilir:
- Kullanıcılar hangi formları/verileri otomatik olarak doldurduklarına dikkat etmelidir;
- Geliştiriciler bu verileri kullanmaktan kaçınmalıdır;
- Tarayıcılar, insanların verilerini koruma konusunda daha iyi bir iş çıkarmalıdır.
Temelde, bu karanlık kalıp bir tarayıcı sorunudur (ve esas olarak bir Chrome sorunudur) ve küçük bir sorun değildir (çevrimiçi gizlilik kilit olmalıdır). Ama bir seçim var. Sonunda, karanlık desenden yararlanmak ya da kullanmamak geliştiricilere kalmış. Öyleyse akıllıca seçelim ve doğru olanı yapalım.
Smashing Magazine Üzerine Daha Fazla Okuma
- Daha İyi Form Tasarımı: Sayfa Başına Bir Şey (Örnek Olay), Adam Silver
- Web Formlarında Yaygın Endişeler ve Gizlilik, Vitaly Friedman
- Form Stillerini
accent-color
Renkle Sadeleştirme, Michelle Barker - HTML5 Girdi Türleri: Şimdi Neredeler?, Drew McLellan
- Ionic React'te Formlar ve Doğrulama, Jerry Navi
- Mobil Form Tasarımı İçin En İyi Uygulamalar, Nick Babich