html - आप वेब फ़ॉर्म फ़ील्ड/इनपुट टैग पर ब्राउज़र स्वत: पूर्ण को कैसे अक्षम करते हैं?




browser autocomplete (20)

Chrome का समाधान इनपुट प्रकार के पासवर्ड में autocomplete="new-password" जोड़ना है।

उदाहरण:

<form name="myForm"" method="post">
<input name="user" type="text" />
<input name="pass" type="password" autocomplete="new-password" />
<input type="submit">
</form>

Chrome हमेशा डेटा को स्वत: पूर्ण करता है यदि उसे एक प्रकार का पासवर्ड मिल जाता है , बस उस बॉक्स के लिए इंगित करने के लिए पर्याप्त है autocomplete = "new-password"

यह मेरे लिए अच्छा काम करता है।

ध्यान दें: F12 के साथ सुनिश्चित करें कि आपके परिवर्तन प्रभावी हों, कई बार ब्राउज़र कैश में पेज को सहेजते हैं, इससे मुझे एक बुरा आभास हुआ कि यह काम नहीं किया, लेकिन ब्राउज़र वास्तव में बदलाव नहीं लाया।

आप किसी विशिष्ट input (या form field ) के लिए प्रमुख ब्राउज़रों में autocomplete को कैसे अक्षम करते हैं?


अधिकांश प्रमुख ब्राउज़र और पासवर्ड प्रबंधक (सही तरीके से, IMHO) अब autocomplete=off उपेक्षा autocomplete=off

क्यूं कर? कई बैंकों और अन्य "हाई सिक्योरिटी" वेबसाइटों ने अपने लॉगिन पेजों पर "सुरक्षा उद्देश्यों के लिए" autocomplete=off जोड़ autocomplete=off "लेकिन यह वास्तव में सुरक्षा को कम कर देता है क्योंकि इससे लोगों को इन हाई-सिक्योरिटी साइट्स पर पासवर्ड बदलने में आसानी होती है ताकि याद रखना आसान हो (और इस तरह दरार ) चूँकि स्वत: पूर्ण टूट गया था।

बहुत समय पहले अधिकांश पासवर्ड प्रबंधकों ने autocomplete=off अनदेखा करना शुरू कर दिया autocomplete=off , और अब ब्राउज़र केवल उपयोगकर्ता नाम / पासवर्ड इनपुट के लिए ऐसा करना शुरू कर रहे हैं।

दुर्भाग्य से, स्वत: पूर्ण कार्यान्वयन में बग उपयोगकर्ता नाम और / या पासवर्ड की जानकारी अनुचित रूप से फ़ील्ड में डालते हैं, जिससे फ़ॉर्म सत्यापन त्रुटियां होती हैं, या इससे भी बदतर, गलती से उपयोगकर्ता नाम फ़ील्ड में डालते हैं जो उपयोगकर्ता द्वारा जानबूझकर खाली छोड़ दिया गया था।

वेब डेवलपर क्या करना है?

  • यदि आप किसी पृष्ठ पर सभी पासवर्ड फ़ील्ड अपने आप से रख सकते हैं, तो यह एक शानदार शुरुआत है क्योंकि ऐसा लगता है कि पासवर्ड फ़ील्ड की उपस्थिति उपयोगकर्ता के लिए मुख्य ट्रिगर है / में स्वत: पूर्ण होने के लिए पास करें अन्यथा नीचे दिए गए सुझावों को पढ़ें।
  • सफारी नोटिस कि 2 पासवर्ड फ़ील्ड हैं और इस मामले में स्वत: पूर्णता अक्षम करता है, यह मानते हुए कि यह एक परिवर्तन पासवर्ड फ़ॉर्म होना चाहिए, लॉगिन फ़ॉर्म नहीं। इसलिए जहाँ भी आप अनुमति देते हैं, उनके लिए 2 पासवर्ड फ़ील्ड (नए और नए की पुष्टि करें) का उपयोग करना सुनिश्चित करें
  • Chrome 34, दुर्भाग्य से, जब भी यह पासवर्ड फ़ील्ड देखता है, तो उपयोगकर्ता / पास के साथ फ़ील्ड को स्वत: लोड करने का प्रयास करेगा। यह काफी बुरा बग है कि उम्मीद है, वे सफारी व्यवहार को बदल देंगे। हालाँकि, इसे अपने फ़ॉर्म के शीर्ष पर जोड़ने से पासवर्ड ऑटोफ़िल अक्षम हो जाता है:

    <input type="text" style="display:none">
    <input type="password" style="display:none">

मैंने अभी तक IE या फ़ायरफ़ॉक्स की पूरी तरह से जांच नहीं की है, लेकिन जवाब को अपडेट करने में खुशी होगी अगर दूसरों की टिप्पणियों में जानकारी हो।


इस बातचीत में मेरे लिए कोई भी समाधान काम नहीं आया।

मैंने आखिर में एक शुद्ध HTML समाधान निकाला, जिसमें कोई जावास्क्रिप्ट की आवश्यकता नहीं है , आधुनिक ब्राउज़रों में काम करता है (IE को छोड़कर; कम से कम 1 कैच, राइट?) था, और आपको पूरे फॉर्म के लिए स्वत: पूर्ण अक्षम करने की आवश्यकता नहीं है।

बस form पर स्वत: पूर्ण बंद करें और फिर इसे चालू करें किसी भी input जिसे आप प्रपत्र के भीतर काम करना चाहते हैं। उदाहरण के लिए:

<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>

कभी-कभी स्वत: पूर्ण = बंद भी क्रेडेंशियल्स को गलत फ़ील्ड में भरने से नहीं रोक सकता है , लेकिन उपयोगकर्ता या उपनाम फ़ील्ड नहीं।

यह वर्कअराउंड ब्राउज़र के व्यवहार के बारे में apinstein की पोस्ट के अतिरिक्त है।

केवल पढ़ने के लिए ब्राउज़र ऑटोफ़िल को ठीक करें और फ़ोकस पर ध्यान केंद्रित करें (क्लिक करें और टैब)

 <input type="password" readonly  
     onfocus="this.removeAttribute('readonly');"/>

अपडेट: मोबाइल सफारी क्षेत्र में कर्सर सेट करता है, लेकिन वर्चुअल कीबोर्ड नहीं दिखाता है। नया फिक्स पहले की तरह काम करता है लेकिन वर्चुअल कीबोर्ड को संभालता है:

<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();  }" />

लाइव डेमो https://jsfiddle.net/danielsuess/n0scguv6/

// अपडेट

क्योंकि ब्राउज़र ऑटो गलत पाठ क्षेत्र में साख भरता है !?

मैं क्रोम और सफारी पर इस अजीब व्यवहार को नोटिस करता हूं, जब एक ही रूप में पासवर्ड फ़ील्ड होते हैं मुझे लगता है, ब्राउज़र आपके सहेजे गए क्रेडेंशियल्स सम्मिलित करने के लिए एक पासवर्ड फ़ील्ड की तलाश करता है। तब यह ऑटो भरता है (केवल अवलोकन के कारण अनुमान लगाता है) निकटतम पाठ-इनपुट क्षेत्र, जो DOM में पासवर्ड फ़ील्ड से पहले दिखाई देता है। चूंकि ब्राउज़र अंतिम उदाहरण है और आप इसे नियंत्रित नहीं कर सकते,

ऊपर पढ़ा गया यह मेरे लिए काम करता है।


खेल में थोड़ी देर हो गई ... लेकिन मैं इस समस्या में भाग गया और कई विफलताओं की कोशिश की, लेकिन मेरे लिए यह एक काम MDN पर मिला

कुछ स्थिति में, ब्राउज़र स्वत: पूर्णता मानों का सुझाव देता रहेगा, भले ही स्वतः पूर्ण विशेषता बंद हो जाए। यह अप्रत्याशित व्यवहार डेवलपर्स के लिए काफी हैरान करने वाला हो सकता है। वास्तव में नो-पूरा करने के लिए बाध्य करने की चाल इस तरह की विशेषता के लिए एक यादृच्छिक स्ट्रिंग असाइन करना है:

autocomplete="nope"

जैसा कि अन्य लोगों ने कहा है, उत्तर autocomplete="off"

हालाँकि, मुझे लगता है कि यह बताने के लायक है कि कुछ मामलों में इसका उपयोग करना एक अच्छा विचार है क्योंकि कुछ उत्तरों और duplicate प्रश्नों ने सुझाव दिया है कि इसे बंद न करना बेहतर है।

क्रेडिट कार्ड नंबर संग्रहीत करने वाले ब्राउज़र को रोकना उपयोगकर्ताओं को नहीं छोड़ा जाना चाहिए। बहुत से उपयोगकर्ताओं को यह भी एहसास नहीं होगा कि यह एक समस्या है।

क्रेडिट कार्ड सुरक्षा कोड के लिए इसे खेतों में बंद करना विशेष रूप से महत्वपूर्ण है। जैसा कि यह पृष्ठ बताता है:

"सुरक्षा कोड को कभी संग्रहीत न करें ... इसका मूल्य अनुमान पर निर्भर करता है कि इसे आपूर्ति करने का एकमात्र तरीका भौतिक क्रेडिट कार्ड से इसे पढ़ना है, यह साबित करता है कि आपूर्ति करने वाला व्यक्ति वास्तव में कार्ड रखता है।"

समस्या यह है, अगर यह एक सार्वजनिक कंप्यूटर (साइबर कैफे, लाइब्रेरी आदि) है तो अन्य उपयोगकर्ताओं के लिए आपके कार्ड विवरण चोरी करना आसान है, और यहां तक ​​कि आपकी खुद की मशीन पर भी एक दुर्भावनापूर्ण वेबसाइट स्वत: पूर्ण डेटा चोरी कर सकती है।


जोड़ने की कोशिश करें

readonly onfocus = "this.removeAttribute ('readonly');"

के अतिरिक्त

स्वत: पूर्ण = "बंद"

नीचे दिखाए गए अनुसार इनपुट डेटा ( username , password , आदि) को याद नहीं करना चाहते हैं:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >


अपडेट: यहां इस दृष्टिकोण के आधार पर नीचे पूर्ण उदाहरण दिया गया है जो ड्रैग एंड ड्रॉप , कॉपी , पेस्ट आदि से बचाता है।

<input type="text" name="UserName" style="text-transform:lowercase;" placeholder="Username" 
    autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" 
    oncopy="return false" ondrag="return false" ondrop="return false" 
    onpaste="return false" oncontextmenu="return false" > 

<input type="password" name="Password" placeholder="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" oncopy="return false" ondrag="return false" 
    ondrop="return false" onpaste="return false" oncontextmenu="return false" >

प्रमुख ब्राउज़रों के नवीनतम संस्करणों जैसे कि Google Chrome , Mozilla Firefox , Microsoft Edge , आदि पर परीक्षण किया गया और बिना किसी समस्या के काम किया गया। उम्मीद है की यह मदद करेगा...


तीन विकल्प: पहला:

<input type='text' autocomplete='off' />

दूसरा:

<form action='' autocomplete='off'>

तीसरा (जावास्क्रिप्ट कोड):

$('input').attr('autocomplete', 'off');

बस autocomplete="off" सेट करें। ऐसा करने का एक बहुत अच्छा कारण है: आप अपनी स्वयं की कार्यक्षमता प्रदान करना चाहते हैं!


मुझे उन उत्तरों के साथ अलग-अलग भीख माँगनी होगी जो कहते हैं कि ऑटो-पूर्ण को अक्षम करने से बचें।

पहली बात यह है कि लॉगिन फॉर्म फ़ील्ड पर स्पष्ट रूप से अक्षम नहीं किया जा रहा ऑटो-पीसी एक PCI-DSS विफल है। इसके अलावा, यदि किसी उपयोगकर्ता की स्थानीय मशीन से छेड़छाड़ की जाती है, तो किसी भी स्वत: पूर्ण डेटा को किसी हमलावर द्वारा स्पष्ट रूप से संग्रहीत किए जाने के कारण तुच्छ रूप से प्राप्त किया जा सकता है।

प्रयोज्यता के लिए निश्चित रूप से एक तर्क है, हालांकि यह बहुत ही अच्छा संतुलन है जब यह आता है कि किस रूप में फ़ील्ड को स्वत: पूर्ण अक्षम होना चाहिए और जो नहीं होना चाहिए।


मैं अंतहीन समाधान की कोशिश कर रहा हूं, और फिर मुझे यह मिला:

autocomplete="off" बजाय बस autocomplete="false" उपयोग करें

जैसा कि सरल है, और यह Google क्रोम में भी एक आकर्षण की तरह काम करता है!


मैंने यादृच्छिक वर्णों के उपयोग के साथ Google Chrome के साथ अंतहीन लड़ाई को हल किया है। जब आप हमेशा यादृच्छिक स्ट्रिंग के साथ स्वत: पूर्णता प्रदान करते हैं, तो यह कभी भी कुछ भी याद नहीं रखेगा।

<input name="name" type="text" autocomplete="rutjfkde">

आशा है कि यह अन्य लोगों को मदद करेगा।


संबंधित या वास्तव में, पूरी तरह से विपरीत नोट पर -

"यदि आप उपर्युक्त प्रपत्र के उपयोगकर्ता हैं और स्वतः पूर्ण कार्यक्षमता को फिर से सक्षम करना चाहते हैं, तो इस बुकमार्क पृष्ठ से 'याद रखें पासवर्ड' बुकमार्कलेट का उपयोग करें। यह पृष्ठ पर सभी रूपों के लिए सभी autocomplete="off" विशेषताओं को हटा देता है। अच्छी लड़ाई लड़ रहे हैं! ”


सबसे अच्छा समाधान:

स्वत: पूर्ण उपयोगकर्ता नाम (या ईमेल) और पासवर्ड रोकें:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

स्वत: पूर्ण फ़ील्ड को रोकें:

<input type="text" name="field" autocomplete="nope">

स्पष्टीकरण: autocomplete : autocomplete जारी रहती है <input> , autocomplete="off" काम नहीं करता है, लेकिन आप एक यादृच्छिक स्ट्रिंग को off कर सकते हैं, जैसे कि nope

काम में:

  • क्रोम: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 और 64

  • फ़ायरफ़ॉक्स: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 और 58


autocomplete="off" जोड़ना इसे काटने वाला नहीं है।

इनपुट प्रकार विशेषता बदलें type="search"
Google एक प्रकार की खोज के साथ इनपुट के लिए ऑटो-फिल लागू नहीं करता है।


autocomplete=off अलावा, आप अपने फ़ॉर्म फ़ील्ड नामों को कोड द्वारा यादृच्छिक भी बना सकते हैं जो पृष्ठ उत्पन्न करता है, शायद नामों के अंत में कुछ सत्र-विशिष्ट स्ट्रिंग जोड़कर।

जब फॉर्म सबमिट किया जाता है, तो आप उन्हें सर्वर साइड पर प्रोसेस करने से पहले उस हिस्से को बंद कर सकते हैं। यह वेब ब्राउज़र को आपके क्षेत्र के लिए संदर्भ खोजने से रोकेगा और XSRF हमलों को रोकने में भी मदद कर सकता है क्योंकि एक हमलावर फॉर्म सबमिट करने के लिए फ़ील्ड नामों का अनुमान लगाने में सक्षम नहीं होगा।


तो यहाँ है:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">


अगर autocomplete="off"काम नहीं करता है तो भी इन्हें आज़माएं :

autocorrect="off" autocapitalize="off" autocomplete="off"

यह एक सुरक्षा समस्या है जिसे ब्राउज़र अब अनदेखा कर देते हैं। ब्राउज़र इनपुट नामों का उपयोग करके सामग्री की पहचान करते हैं और संग्रहीत करते हैं, भले ही डेवलपर्स को लगता है कि जानकारी संवेदनशील है और संग्रहीत नहीं की जानी चाहिए। 2 अनुरोधों के बीच एक इनपुट नाम अलग करने से समस्या का समाधान हो जाएगा (लेकिन फिर भी ब्राउज़र के कैश में सहेजा जाएगा और ब्राउज़र के कैश को भी बढ़ाएगा)। उपयोगकर्ता से पूछें कि उसके ब्राउज़र की सेटिंग्स में विकल्पों को सक्रिय या निष्क्रिय करना एक अच्छा समाधान नहीं है। मुद्दा बैकएंड में तय किया जा सकता है।

यहाँ मेरा फिक्स है। एक दृष्टिकोण जो मैंने अपने ढांचे में लागू किया है। सभी स्वतः पूर्ण तत्व इस तरह छिपे हुए इनपुट के साथ उत्पन्न होते हैं:

<? $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>

सर्वर तो इस तरह पोस्ट चर की प्रक्रिया:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

मान को हमेशा की तरह एक्सेस किया जा सकता है

var_dump($_POST['username']);

और ब्राउज़र पिछले अनुरोध या पिछले उपयोगकर्ताओं से जानकारी का सुझाव देने में सक्षम नहीं होगा।

सभी एक आकर्षण की तरह काम करते हैं, भले ही ब्राउज़र अपडेट करें, स्वत: पूर्णता को अनदेखा करना चाहते हैं या नहीं। यह मेरे लिए इस मुद्दे को ठीक करने का सबसे अच्छा तरीका है।


यहां बताई गई किसी भी हैक ने मेरे लिए क्रोम में काम नहीं किया। यहाँ इस मुद्दे की चर्चा है: https://code.google.com/p/chromium/issues/detail?id=468153#c41

इसे किसी <form>कार्य के अंदर जोड़ना (कम से कम अभी के लिए):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>






autocomplete