autocomplete
Belirli bir input
(veya form field
) ana tarayıcıda nasıl devre dışı bırakıyorsunuz ?
autocomplete
Belirli bir input
(veya form field
) ana tarayıcıda nasıl devre dışı bırakıyorsunuz ?
Yanıtlar:
Firefox 30 autocomplete="off"
parolaları yok sayar ve parolanın istemcide saklanıp saklanmayacağını kullanıcıya sormayı tercih eder. 5 Mayıs 2014 tarihli aşağıdaki açıklamaya dikkat edin:
- Parola yöneticisi her zaman bir parola kaydetmek isteyip istemediğini sorar. Parolalar, kullanıcının izni olmadan kaydedilmez.
- IE ve Chrome'dan sonra bu değişikliği uygulayan üçüncü tarayıcı biziz.
Göre Mozilla Geliştirici Ağı dokümantasyon, Boole formu eleman niteliği autocomplete
önler eski tarayıcılarda önbelleğe alınmasını verileri oluştururlar.
<input type="text" name="foo" autocomplete="off" />
Ek olarak autocomplete=off
, form alan adlarınızın sayfayı oluşturan kodla, belki de adların sonuna oturuma özgü bir dize ekleyerek rastgele sıralanmasını sağlayabilirsiniz.
Form gönderildiğinde, sunucu tarafında işlem yapmadan önce bu parçayı çıkarabilirsiniz. Bu, web tarayıcısının alanınız için bağlam bulmasını önler ve ayrıca bir saldırgan form gönderme için alan adlarını tahmin edemeyeceği için XSRF saldırılarını önlemeye yardımcı olabilir.
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
Büyük tarayıcıların ve şifre yöneticilerinin çoğu (doğru, IMHO) artık yok sayılıyor autocomplete=off
.
Neden? Birçok banka ve diğer "yüksek güvenlikli" web siteleri autocomplete=off
, giriş sayfalarına "güvenlik amaçlı" ekledi , ancak bu aslında güvenliği düşürüyor, çünkü bu yüksek güvenlikli sitelerin şifrelerini otomatik tamamlamadan beri hatırlaması kolay (ve böylece kırılıyor) Kırıldı.
Uzun zaman önce çoğu şifre yöneticisi göz ardı etmeye başladı autocomplete=off
ve şimdi tarayıcılar sadece kullanıcı adı / şifre girişleri için aynısını yapmaya başlıyor.
Ne yazık ki, otomatik tamamlama uygulamalarındaki hatalar kullanıcı adı ve / veya şifre bilgilerini uygunsuz form alanlarına ekleyerek form doğrulama hatalarına neden olur veya daha da kötüsü, yanlışlıkla kullanıcı adlarını kasıtlı olarak boş bırakılan alanlara ekler.
Bir web geliştiricisi ne yapmalı?
Ne yazık ki Chrome 34, bir şifre alanı gördüğünde alanları kullanıcı / geçiş ile otomatik olarak doldurmaya çalışacaktır. Umarım Safari davranışını değiştirecekleri oldukça kötü bir hatadır. Ancak, bunu formunuzun en üstüne eklemek şifre otomatik doldurmayı devre dışı bırakıyor gibi görünüyor:
<input type="text" style="display:none">
<input type="password" style="display:none">
Henüz IE veya Firefox'u tam olarak araştırmadım, ancak yorumlarda başkalarının bilgisi varsa cevabı güncellemekten memnuniyet duyarız.
type='password'
sayfada iki alan oluşturmak , tarayıcının "şifreyi kaydet" otomatik tamamlamasının yok sayılmasına neden oldu;
Bazen hatta otomatik tamamlama = off olur doldurmaya engellemez kullanıcı veya takma alan yanlış alanlara kimlik bilgilerini değil.
Bu geçici çözüm, apinstein'ın tarayıcı davranışı hakkındaki gönderisine ek olarak.
tarayıcı otomatik dolgusunu salt okunur olarak düzeltin ve odakta yazılabilir olarak ayarlayın (tıklama ve sekme)
<input type="password" readonly
onfocus="this.removeAttribute('readonly');"/>
Güncelleme: Mobil Safari, alanda imleci ayarlar, ancak sanal klavye göstermez. Yeni Düzeltme önceki gibi çalışır ancak sanal klavyeyi kullanır:
<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
this.removeAttribute('readonly');
// fix for mobile safari to show virtual keyboard
this.blur(); this.focus(); }" />
Canlı Demo https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Çünkü Tarayıcı otomatik olarak kimlik bilgilerini yanlış metin alanına dolduruyor !?
Aynı formda şifre alanları olduğunda Chrome ve Safari'de bu garip davranışı fark ettim . Sanırım tarayıcı, kayıtlı kimlik bilgilerinizi girmek için bir şifre alanı arar. Ardından, DOM'daki şifre alanından önce görünen en yakın metin benzeri giriş alanını otomatik olarak doldurur (sadece gözlem nedeniyle tahmin eder). Tarayıcı son örnek olduğu ve kontrol edemediğiniz için,
Yukarıdaki bu salt okunurluk benim için çalıştı.
readonly
çıkarılır, otomatik tamamlamada saha sonuçlarının müteakip seçim dönen.
<form name="form1" id="form1" method="post"
autocomplete="off" action="http://www.example.com/form.cgi">
Bu, Internet Explorer ve Mozilla FireFox'ta çalışacaktır, olumsuz, XHTML standardı olmamasıdır.
input type="password"
. Umarım başka hiçbir tarayıcı bu işlevi kaldırmayı seçmez.
autocomplete="off"
üzerinde form
Chrome için çalıştı tek şeydir.
Chrome için çözüm autocomplete="new-password"
, giriş türü şifresine eklemektir . Lütfen aşağıdaki Örneği inceleyin.
Misal:
<form name="myForm"" method="post">
<input name="user" type="text" />
<input name="pass" type="password" autocomplete="new-password" />
<input type="submit">
</form>
Chrome, bir kutu şifresi bulursa verileri her zaman otomatik olarak tamamlar; bu kutu için belirtmek için yeterlidir autocomplete = "new-password"
.
Bu benim için iyi çalışıyor.
Not: F12
Değişikliklerin geçerli olduğundan emin olun , tarayıcılar sayfayı önbelleğe birçok kez kaydettiğinden, bu bana işe yaramadığına dair kötü bir izlenim verdi, ancak tarayıcı aslında değişiklikleri getirmedi.
Diğerlerinin söylediği gibi, cevap autocomplete="off"
Ancak, bunu bazı durumlarda bunun bazı cevaplar olarak kullanmanın ve çoğaltmanın neden iyi bir fikir olduğunu belirtmeye değer. bunu kapatmak için daha iyi değil tavsiye ettiler sorular.
Kredi kartı numarası depolayan tarayıcıları durdurmak kullanıcılara bırakılmamalıdır. Çok fazla kullanıcı bunun bir sorun olduğunu bile fark etmeyecek.
Kredi kartı güvenlik kodları için alanların kapatılması özellikle önemlidir. Gibi bu sayfayı devletler:
"Güvenlik kodunu asla saklamayın ... değeri, bunu sağlamanın tek yolunun fiziksel kredi kartından okumak olduğu ve bunu sağlayan kişinin kartı tuttuğunu kanıtladığı varsayımına bağlıdır."
Sorun şu ki, halka açık bir bilgisayarsa (siber kafe, kütüphane vb.) Diğer kullanıcıların kart bilgilerinizi çalması kolaydır ve hatta kendi makinenizde kötü amaçlı bir web sitesi otomatik tamamlama verilerini çalabilir .
Google Chrome ile olan sonsuz mücadeleyi rastgele karakterler kullanarak çözdüm. Otomatik tamamlamayı her zaman rastgele dize ile oluşturduğunuzda hiçbir şeyi hatırlamaz.
<input name="name" type="text" autocomplete="rutjfkde">
Diğer insanlara yardımcı olacağını umuyoruz.
autocompleteoff
Sınıfı istediğiniz giriş alanına .
Otomatik tamamlamayı devre dışı bırakmaktan kaçınmak için bu yanıtlarla farklılık göstermek için yalvarmalıyım.
İlk ortaya çıkacak şey, otomatik tamamlamanın giriş formu alanlarında açıkça devre dışı bırakılmaması bir PCI-DSS hatası olmasıdır. Buna ek olarak, bir kullanıcının yerel makinesi tehlikeye atılırsa, herhangi bir otomatik tamamlama verisi bir saldırgan tarafından açık bir şekilde saklandığı için önemsiz bir şekilde elde edilebilir.
Kullanılabilirlik için kesinlikle bir argüman var, ancak hangi form alanlarının otomatik tamamlama devre dışı bırakılması ve hangilerinin olmaması gerektiği konusunda çok iyi bir denge var.
Üç seçenek: Birincisi:
<input type='text' autocomplete='off' />
İkinci:
<form action='' autocomplete='off'>
Üçüncü (javascript kodu):
$('input').attr('autocomplete', 'off');
İlgili veya aslında, tamamen zıt notta -
"Yukarıda belirtilen formun kullanıcısıysanız ve otomatik tamamlama işlevini yeniden etkinleştirmek istiyorsanız, bu yer imleri sayfasındaki " parolayı hatırla "yer imini kullanın . Sayfadaki
autocomplete="off"
tüm formlardaki tüm öznitelikleri kaldırır . "
Aslında bir site için sasb fikrini kullandık . Bir doktor ofisini çalıştırmak için bir tıbbi yazılım web uygulamasıydı. Bununla birlikte, müşterilerimizin birçoğu yarı kamu terminalleri de dahil olmak üzere birçok farklı iş istasyonu kullanan cerrahlardı. Bu nedenle, otomatik kaydedilen şifrelerin anlamını anlamayan veya dikkat etmeyen bir doktorun yanlışlıkla giriş bilgilerini kolayca erişemediğinden emin olmak istediler. Tabii ki, bu IE8, FF3.1, vs.'de yer almaya başlayan özel tarama fikrinden önceydi. Buna rağmen, birçok doktor değişmeyen BT'li hastanelerde eski okul tarayıcılarını kullanmak zorunda kalıyor.
Bu nedenle, giriş sayfasının yalnızca bu gönderi için çalışacak rastgele alan adları oluşturmasını sağladık. Evet, daha az kullanışlıdır, ancak giriş bilgilerini genel terminallerde saklamama konusunda kullanıcıyı baştan çıkarır.
Bu konuşmada hiçbir çözüm benim için çalışmadı.
Sonunda hiçbir Javascript gerektiren saf bir HTML çözümü bulduk , modern tarayıcılarda çalışır (IE hariç; en az 1 catch vardı, değil mi?) Ve tüm form için otomatik tamamlamayı devre dışı bırakmanızı gerektirmez.
Otomatik tamamlamayı kapatıp formda çalışmasını istediğiniz form
herhangi bir input
şey için AÇIK duruma getirmeniz yeterlidir. Örneğin:
<form autocomplete="off">
<!-- these inputs will not allow autocomplete and chrome
won't highlight them yellow! -->
<input name="username" />
<input name="password" type="password" />
<!-- this field will allow autocomplete to work even
though we've disabled it on the form -->
<input name="another_field" autocomplete="on" />
</form>
Sadece hazır autocomplete="off"
. Bunu yapmak için çok iyi bir neden var: Kendi otomatik tamamlama işlevinizi sağlamak istiyorsunuz!
Sonsuz çözümler deniyorum ve sonra bunu buldum:
autocomplete="off"
Sadece kullanmak yerineautocomplete="false"
Bu kadar basit ve Google Chrome'da da bir cazibe gibi çalışıyor!
Bu benim için çalışıyor.
<input name="pass" type="password" autocomplete="new-password" />
Bu stratejiyi metin, select vb. Diğer kontrollerde de kullanabiliriz.
autocomplete=off
HTML 5'te desteklendiğini düşünüyorum .
Kendinize bunu neden yapmak istediğinizi sorun - bazı durumlarda mantıklı olabilir, ancak bunu yapmak için yapmayın.
Kullanıcılar için daha az uygundur ve OS X'teki bir güvenlik sorunu bile değildir (aşağıda Soren tarafından belirtilmiştir). Kullanıcıların şifrelerinin uzaktan çalınmasından endişe ediyorsanız, uygulamanız kullansa bile bir tuş kaydedici yine de yapabilir autcomplete=off
.
Bir tarayıcıya sahip olmayı seçen bir kullanıcı olarak bilgilerimin çoğunu hatırlıyorum, siteniz benimkini hatırlamıyorsa sinir bozucu bulurdum.
Ek olarak
autocomplete="off"
kullanım
readonly onfocus="this.removeAttribute('readonly');"
girişler için bunları form verilerini (hatırlamak istemediklerini username
, password
aşağıda gösterildiği gibi, vs.):
<input type="text" name="UserName" autocomplete="off" readonly
onfocus="this.removeAttribute('readonly');" >
<input type="password" name="Password" autocomplete="off" readonly
onfocus="this.removeAttribute('readonly');" >
Bu yardımcı olur umarım.
$(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
onfocusout="this.setAttribute('readonly', 'readonly');"
En iyi çözüm:
Otomatik tamamlama kullanıcı adını (veya e-postasını) ve şifreyi önleyin:
<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">
Bir alanın otomatik tamamlanmasını önleme:
<input type="text" name="field" autocomplete="nope">
Açıklama:
autocomplete
çalışmaya devam eder <input>
, autocomplete="off"
çalışmaz, ancak off
rastgele bir dizeye değiştirebilirsiniz nope
.
Çalıştığı yerler:
Krom: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 ve 64
Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 ve 58
autocomplete
Öznitelik için dize değerleri ayarlamayı denedim ve hala giriş altında otomatik tamamlama önerileri olarak önceki girişleri görüntüler.
autocomplete
, yine de önceden girilen değerlere dayalı bir öneri açılır listesi alıyorum . Masaüstünde iyi, ancak Android chrome'da iyi değil.
Oyuna biraz geç ... ama ben sadece bu problemle karşılaştım ve birkaç başarısızlık denedim, ama bu benim için işe yaradı MDN'de bulundu
Bazı durumlarda, otomatik tamamlama özelliği kapalı olarak ayarlanmış olsa bile tarayıcı otomatik tamamlama değerleri önerir. Bu beklenmedik davranış, geliştiriciler için oldukça şaşırtıcı olabilir. Tamamlanmamayı gerçekten zorlamanın hilesi, özniteliğe rastgele bir dize atamaktır:
autocomplete="nope"
Eklemek autocomplete="off"
kesmeyecek.
Giriş türü özelliğini olarak değiştirin type="search"
.
Google, bir tür arama içeren girişlere otomatik doldurma uygulamaz.
Alanlar için standart olmayan bir ad ve kimlik kullanın, böylece "ad" yerine "ad_" olsun. Tarayıcılar bu durumda ad alanı olarak görülmez. Bununla ilgili en iyi bölüm, bunu tüm alanlara değil bazı alanlara yapabilmeniz ve bazı alanların tümünü değil bazılarını otomatik olarak tamamlamasıdır.
Geçersiz XHTML'yi önlemek için, javascript kullanarak bu özelliği ayarlayabilirsiniz. JQuery kullanılan örnek:
<input type="text" class="noAutoComplete" ... />
$(function() {
$('.noAutoComplete').attr('autocomplete', 'off');
});
Sorun, javascript içermeyen kullanıcıların otomatik tamamlama işlevini almalarıdır.
Rapor edildikten çok sonra bunun hala bir sorun olduğuna inanamıyorum. Yukarıdaki çözümler benim için işe yaramadı, çünkü safari öğenin ne zaman görüntülenmediğini veya ekran dışında olduğunu biliyor gibi göründü, ancak aşağıdakiler benim için çalıştı:
<div style="height:0px; overflow:hidden; ">
Username <input type="text" name="fake_safari_username" >
Password <input type="password" name="fake_safari_password">
</div>
Umarım bu birisi için faydalıdır!
İşte burada:
function turnOnPasswordStyle() {
$('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
Bu, tarayıcıların artık yoksaydığı bir güvenlik sorunudur. Geliştiriciler bilginin hassas olduğunu ve saklanmaması gerektiğini düşünüyor olsalar da tarayıcılar içeriği girdi adlarını kullanarak tanımlar ve saklar. Bir giriş adının 2 istek arasında farklı yapılması sorunu çözer (ancak yine de tarayıcının önbelleğine kaydedilir ve ayrıca tarayıcının önbelleğini de artırır). Kullanıcıdan tarayıcı ayarlarındaki seçenekleri etkinleştirmesini veya devre dışı bırakmasını isteyin iyi bir çözüm değildir. Sorun arka uçta düzeltilebilir.
İşte benim düzeltmem. Çerçevemde uyguladığım bir yaklaşım. Tüm otomatik tamamlama öğeleri aşağıdaki gibi gizli bir girişle oluşturulur:
<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
<input type="text" name="<? echo $r; ?>" />
<input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
<input type="submit" name="submit" value="submit" />
</form>
Sunucu daha sonra şöyle değişkenleri işler:
foreach ($_POST as $key => $val)
{
if(preg_match('#^__autocomplete_fix_#', $key) === 1){
$n = substr($key, 19);
if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
}
}
Değer her zamanki gibi erişilebilir
var_dump($_POST['username']);
Ve tarayıcı önceki istekten veya önceki kullanıcılardan bilgi öneremez.
Tarayıcılar güncelleştirilse bile, hepsi otomatik tamamlamayı yoksaymak ya da atmak istemez gibi bir cazibe gibi çalışır. Sorunu benim için düzeltmenin en iyi yolu bu oldu.
Burada bahsedilen hack'lerin hiçbiri Chrome'da benim için çalışmadı. Burada sorunla ilgili bir tartışma var: https://code.google.com/p/chromium/issues/detail?id=468153#c41
Bunu bir <form>
eserin içine eklemek (en azından şimdilik):
<div style="display: none;">
<input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
maxlength="0"
firefox'un alanı otomatik olarak doldurmasını engelliyor.