ประเภทอินพุต = รหัสผ่านอย่าให้เบราว์เซอร์จำรหัสผ่าน


101

ฉันจำได้ว่าเห็นวิธีการ<input type="password" />ที่เบราว์เซอร์จะไม่แจ้งให้ผู้ใช้บันทึกรหัสผ่าน แต่ฉันกำลังวาดภาพว่างเปล่า มีแอตทริบิวต์ HTML หรือเคล็ดลับ JavaScript ที่จะทำสิ่งนี้หรือไม่?


คำตอบ:


123

ลองใช้autocomplete="off". ไม่แน่ใจว่าทุกเบราว์เซอร์รองรับหรือไม่ เอกสาร MSDN ที่นี่

แก้ไข : หมายเหตุ: เบราว์เซอร์ส่วนใหญ่เลิกรองรับแอตทริบิวต์นี้ โปรดดูที่การเติมข้อความอัตโนมัติ = "ปิด" เข้ากันได้กับเบราว์เซอร์สมัยใหม่ทั้งหมดหรือไม่

นี่เป็นเนื้อหาที่ควรให้กับผู้ใช้มากกว่าผู้ออกแบบเว็บไซต์


2
คุณยังสามารถส่งเพจด้วย HTTPS และผ่านส่วนหัว HTTP หรือแท็ก META เพื่อป้องกันการแคช ด้วยวิธีนี้รหัสผ่านจะไม่ถูกเก็บไว้ด้วย (อย่างน้อยก็ใน Internet Explorer)
doekman

สำหรับการตรวจสอบความถูกต้อง HTML5 จะเพิ่มแอตทริบิวต์การเติมข้อความอัตโนมัติลงในข้อมูลจำเพาะดังนั้นตอนนี้จึงเป็นเรื่องปกติ
VictorySaber

9
หมายเหตุสำหรับผู้อ่านในอนาคต: เบราว์เซอร์หลักทั้งหมดกำลังมุ่งไปที่การละเว้นแอตทริบิวต์ (ดูstackoverflow.com/a/21348793/37706 )
rdans

@RyanDansie ขอบคุณสำหรับการชี้ให้เห็นว่า ฉันได้อัปเดตคำตอบแล้ว คำตอบเก่าคือ ... เก่า
tvanfosson

8
"นี่เป็นเนื้อหาที่ควรแก่ผู้ใช้มากกว่าผู้ออกแบบเว็บไซต์" มีทั้งเหตุผลทางเทคนิคและไม่ใช่ทางเทคนิคสำหรับการมีสิ่งนี้ ไม่ควรจำรหัสผ่านแบบใช้ครั้งเดียวเป็นต้น เว็บไซต์ธนาคารที่ "ป้อนหมายเลข PIN แรกของคุณ" เป็นอีก อย่าลืมว่านักวิเคราะห์ธุรกิจอาจตัดสินใจว่าเขาต้องการฟิลด์รหัสผ่านและลบตัวเลือกออกจากผู้พัฒนา
ปราก

61

<input type="password" autocomplete="off" />

ฉันแค่อยากจะเพิ่มว่าในฐานะผู้ใช้ฉันคิดว่าสิ่งนี้น่ารำคาญมากและเป็นเรื่องยุ่งยากที่จะเอาชนะ เราไม่แนะนำให้ใช้สิ่งนี้เนื่องจากจะเป็นการซ้ำเติมผู้ใช้ของคุณมากกว่า

รหัสผ่านไม่ได้ถูกเก็บไว้ใน MRU และเครื่องสาธารณะที่กำหนดค่าอย่างถูกต้องจะไม่บันทึกชื่อผู้ใช้ด้วยซ้ำ


23
+1 สำหรับ "อย่ารบกวนผู้ใช้ของคุณ" นั่นคือสิ่งที่คุณสมบัติแบบนี้ทำ เช่นเดียวกับไซต์ที่บังคับให้ปิดการแคชดังนั้นปุ่มย้อนกลับจะล้างแบบฟอร์ม ระคายเคืองอย่างมาก
cletus

6
+1 ฉันเห็นด้วยอย่างยิ่ง สำหรับผู้ดูแลระบบแก้ไขหน้าโปรไฟล์ลูกค้าที่คุณป้อนรหัสผ่านก็ต่อเมื่อคุณตั้งใจจะเปลี่ยน ด้วยวิธีนี้ผู้ดูแลระบบจะไม่เปลี่ยนรหัสผ่านทุกครั้งที่ไปแก้ไขข้อมูลของลูกค้า
DavGarcia

14
มีประโยชน์มากสำหรับช่องหมายเลขบัตรเครดิต แบบฟอร์มของ PayPal จะถูกเก็บไว้ในทุกเบราว์เซอร์และทุกคนที่ใช้คอมพิวเตอร์ของคุณสามารถป้อนข้อมูลทั้งหมดซ้ำได้ดังนั้นคุณต้องไปและลบช่องที่จำทั้งหมดด้วยตนเอง
Egor Pavlikhin

31
ในรูปแบบที่ผู้ใช้สามารถตั้งรหัสผ่านที่ไม่มีส่วนเกี่ยวข้องกับการเข้าสู่ระบบการเปิดใช้งานการเติมข้อความอัตโนมัติเป็นตัวเลือกที่น่ารำคาญกว่าเบราว์เซอร์อาจเสนอให้บันทึกรหัสผ่านที่ไม่สามารถทำอะไรได้จริง นอกจากนี้หากความปลอดภัยเป็นปัญหาที่ละเอียดอ่อนฉันจะไม่ถือว่าเครื่องสาธารณะทั้งหมดได้รับการกำหนดค่าอย่างถูกต้อง
jrb

3
ฉันใช้รหัสนี้เป็นรหัสผ่านแบบใช้ครั้งเดียว อย่างที่ jrb บอกมันจะน่ารำคาญมากถ้าบราวเซอร์เก็บไว้
Danation

12

ฉันแก้ด้วยวิธีอื่น คุณสามารถลองสิ่งนี้

<input id="passfld" type="text" autocomplete="off" />
<script type="text/javascript">
// Using jQuery
$(function(){                                               
    setTimeout(function(){
        $("input#passfld").attr("type","password");
    },10);
});


// or in pure javascript
 window.onload=function(){                                              
    setTimeout(function(){  
        document.getElementById('passfld').type = 'password';
    },10);
  }   
</script>

# อีกทางหนึ่ง

 <script type="text/javascript">    
 function setAutoCompleteOFF(tm){
    if(typeof tm =="undefined"){tm=10;}
    try{
    var inputs=$(".auto-complete-off,input[autocomplete=off]"); 
    setTimeout(function(){
        inputs.each(function(){     
            var old_value=$(this).attr("value");            
            var thisobj=$(this);            
            setTimeout(function(){  
                thisobj.removeClass("auto-complete-off").addClass("auto-complete-off-processed");
                thisobj.val(old_value);
            },tm);
         });
     },tm); 
    }catch(e){}
  }
 $(function(){                                              
        setAutoCompleteOFF();
    });
</script>

// คุณต้องเพิ่มแอตทริบิวต์การเติมข้อความอัตโนมัติ = "off" หรือคุณสามารถเพิ่ม class .auto-complete-off ลงในช่องป้อนข้อมูลและเพลิดเพลินกับ

ตัวอย่าง:

  <input id="passfld" type="password" autocomplete="off" />
    OR
  <input id="passfld" class="auto-complete-off" type="password"  />

4
วิธีนี้ป้องกันไม่ให้เบราว์เซอร์เก็บรหัสผ่านแทนที่จะป้องกันการเติมข้อความอัตโนมัติซึ่งเป็นทางออกที่ดีกว่าในสถานการณ์ของฉัน
Pau Fracés

ขอบคุณทำงานให้ฉันกับ Chrome รุ่นล่าสุดโปรดทราบ: ใช้กับระบบภายในที่อนุญาตเฉพาะ Chrome เท่านั้นทำการทดสอบเพิ่มเติมหากใช้ในไซต์การผลิต
Izion

@AntoVinish ฉันหวังว่าโซลูชันสุดท้ายของฉันจะใช้ได้ใน firefox 40
Sarwar Hasan

7

ฉันลองทำสิ่งต่อไปนี้และดูเหมือนว่าจะใช้ได้กับเบราว์เซอร์ใด ๆ :

<input id="passfld" type="text" autocomplete="off" />

<script type="text/javascript">
    $(function(){  
        var passElem = $("input#passfld");
        passElem.focus(function() { 
            passElem.prop("type", "password");                                             
        });
    });
</script>

วิธีนี้ปลอดภัยกว่าการใช้เทคนิคการหมดเวลามากเนื่องจากเป็นการรับประกันว่าช่องป้อนข้อมูลจะยอมให้รหัสผ่านเมื่อผู้ใช้โฟกัส


5

สำหรับปัญหาด้านความปลอดภัยนี่คือสิ่งที่ที่ปรึกษาด้านความปลอดภัยจะแจ้งให้คุณทราบเกี่ยวกับปัญหาทั้งภาคสนาม (ซึ่งมาจากการตรวจสอบความปลอดภัยที่เป็นอิสระจริง):

เปิดใช้งานการเติมข้อความอัตโนมัติ HTML - ช่องรหัสผ่านในรูปแบบ HTML เปิดใช้งานการเติมข้อความอัตโนมัติ เบราว์เซอร์ส่วนใหญ่มีสิ่งอำนวยความสะดวกในการจดจำข้อมูลรับรองของผู้ใช้ที่ป้อนในรูปแบบ HTML

ความเสี่ยงสัมพัทธ์: ต่ำ

ระบบ / อุปกรณ์ที่ได้รับผลกระทบ: o https: // * ** * *** /

ฉันยอมรับด้วยว่าควรครอบคลุมฟิลด์ใด ๆที่มีข้อมูลส่วนตัวอย่างแท้จริง ฉันรู้สึกว่าการบังคับให้บุคคลพิมพ์ข้อมูลบัตรเครดิตรหัส CVC รหัสผ่านชื่อผู้ใช้และอื่น ๆ เป็นเรื่องปกติเมื่อใดก็ตามที่ไซต์นั้นจะเข้าถึงสิ่งที่ควรได้รับการรักษาความปลอดภัย [โดยทั่วไปหรือตามข้อกำหนดการปฏิบัติตามกฎหมาย] ตัวอย่างเช่นแบบฟอร์มการซื้อไซต์ธนาคาร / เครดิตไซต์ภาษีข้อมูลทางการแพทย์ของรัฐบาลกลางนิวเคลียร์ ฯลฯไม่ใช่ไซต์เช่น Stack Overflow หรือ Facebook

ไซต์ประเภทอื่น ๆ เช่น TimeStar Online สำหรับการตอกบัตรเข้าและออกจากงาน - มันโง่มากเพราะฉันใช้พีซี / บัญชีเดียวกันในที่ทำงานตลอดเวลาทำให้ฉันไม่สามารถบันทึกข้อมูลประจำตัวในไซต์นั้นได้ซึ่งแปลกพอที่ฉันทำได้บน Android แต่ไม่ใช่บน iPad แม้แต่พีซีที่ใช้ร่วมกันก็ไม่เลวร้ายนักเนื่องจากการตอกบัตรเข้า / ออกสำหรับคนอื่นไม่ได้ทำอะไรเลยนอกจากรบกวนหัวหน้างานของคุณ (พวกเขาต้องเข้าไปและลบหมัดที่ผิดพลาด - เพียงแค่เลือกที่จะไม่บันทึกบนพีซีสาธารณะ)


5
เพียงแค่เพิ่มความคิดเห็นที่นี่ด้วยเหตุผลที่คุณไม่ต้องการบันทึกรหัสผ่าน ฉันดูแลเว็บไซต์ที่มีบัญชีผู้ใช้ซึ่งผู้ดูแลระบบสามารถเปลี่ยนรหัสผ่านของผู้ใช้ได้ ขณะนี้ไคลเอ็นต์รู้สึกไม่พอใจที่ Chrome เสนอให้บันทึกรหัสผ่านที่ป้อนในแบบฟอร์ม "เปลี่ยนรหัสผ่าน" ทุกครั้งสำหรับผู้ใช้ทุกคนเนื่องจากระบุแบบฟอร์มการแก้ไขผู้ใช้ผิดเป็นแบบฟอร์มการเข้าสู่ระบบ การให้คำแนะนำง่ายๆเช่น "เพียงแค่คลิกไม่จำรหัสผ่าน" นั้นอยู่นอกเหนือจากนั้น
charredUtensil

5
<input type="password" placeholder="Enter New Password" autocomplete="new-password">

จัดให้เลย


2
นี่เป็นวิธีที่มีวิธีแก้ปัญหามากมายและทำได้ง่ายอย่างนี้ทดสอบกับ Firefox (v67) และ Chrome (75) เวอร์ชันล่าสุด
Mariano Ruiz

Chrome 80 ยังคงเสนอให้จำรหัสผ่านหลังจากส่งแบบฟอร์ม
Bouke

4

นี่คือคำตอบที่ดีที่สุดและง่ายที่สุด! ใส่ฟิลด์รหัสผ่านพิเศษไว้หน้าinputฟิลด์ของคุณและตั้งค่าdisplay:noneเพื่อให้เมื่อเบราว์เซอร์กรอกข้อมูลลงไปมันจะทำในสิ่งinputที่คุณไม่สนใจ

เปลี่ยนสิ่งนี้:

<input type="password" name="password" size="25" class="input" id="password" value="">

สำหรับสิ่งนี้:

<input type="password" style="display:none;">
<input type="password" name="password" size="25" class="input" id="password" value="">

อันที่จริงมันใช้งานได้ถ้าช่องรหัสผ่าน 2 ช่องอยู่ในฟอร์ม แต่เบราว์เซอร์ใหม่จะละเว้นรหัสผ่านที่ 2 หากมองไม่เห็นและเปิดใช้งาน (
Cedric Simon

1
การใช้display:noneไม่ได้ผลสำหรับฉัน (Chrome 61 OSX) แต่สิ่งนี้ทำได้:<input type="password" style="position: absolute; top: -1000px;">
John Hascall

2

อ่านคำตอบที่เขาใช้วิธีง่ายๆนี้ซึ่งใช้ได้ทุกที่ (ดูการแก้ไขสำหรับ Safari mobile):

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

1

คุณสามารถใช้ JQuery เลือกรายการโดย id:

$("input#Password").attr("autocomplete","off");

หรือเลือกรายการตามประเภท:

$("input[type='password']").attr("autocomplete","off");

หรือยัง:

คุณสามารถใช้ Javascript แท้:

document.getElementById('Password').autocomplete = 'off';


1

เมื่อเห็นว่าการเติมข้อความอัตโนมัติ = ปิดถูกเลิกใช้แล้วฉันขอแนะนำวิธีแก้ปัญหาที่ใหม่กว่านี้

ตั้งค่าฟิลด์รหัสผ่านของคุณเป็นฟิลด์ข้อความปกติและปิดบังอินพุตของคุณด้วย "ดิสก์" โดยใช้ CSS รหัสควรมีลักษณะดังนี้:

<input type="text" class="myPassword" /> 

input .myPassword{
    text-security:disc;
    -webkit-text-security:disc;
    -mox-text-security:disc;
}

โปรดทราบว่าสิ่งนี้อาจใช้ไม่ได้กับเบราว์เซอร์ firefox และจำเป็นต้องมีคำอธิบายเพิ่มเติม อ่านเพิ่มเติมได้ที่นี่: https://stackoverflow.com/a/49304708/5477548

วิธีแก้ปัญหาถูกนำมาจากลิงค์นี้แต่เพื่อให้สอดคล้องกับ SO "no-hotlinks" ฉันสรุปไว้ที่นี่


0

ในกรณีของเบราว์เซอร์หลัก ๆ ส่วนใหญ่มีการป้อนข้อมูลภายนอกและไม่ได้เชื่อมต่อกับรูปแบบใด ๆ ก็ตามที่ทำให้เบราว์เซอร์คิดว่าไม่มีการส่ง ในกรณีนี้คุณจะต้องใช้การตรวจสอบความถูกต้องของ JS สำหรับการเข้าสู่ระบบของคุณและการเข้ารหัสรหัสผ่านของคุณก็จำเป็นเช่นกัน

ก่อน:

<form action="..."><input type="password"/></form>

หลังจาก:

<input type="password"/>

1
อย่างไรก็ตามนี่เป็นเคล็ดลับที่คุณอาจไม่ควรใช้ การไม่ใช้แท็กแบบฟอร์มโค้ดของคุณจะกลายเป็น HTML4 ตามค่าเริ่มต้นและทำให้การตรวจสอบบัญชีผู้ใช้ของคุณทำได้ยากขึ้น
Cannicide

0

ฉันพบว่าสิ่งต่อไปนี้ใช้ได้กับ Firefox และ Chrome

<form ... > <!-- more stuff -->
<input name="person" type="text" size=30 value="">
<input name="mypswd" type="password" size=6 value="" autocomplete="off">
<input name="userid" type="text" value="security" style="display:none">
<input name="passwd" type="password" value="faker" style="display:none">
<!-- more stuff --> </form>

ทั้งหมดนี้อยู่ในส่วนแบบฟอร์ม "person" และ "mypswd" คือสิ่งที่คุณต้องการ แต่เบราว์เซอร์จะบันทึก "userid" และ "passwd" เพียงครั้งเดียวและจะไม่เปลี่ยนแปลงอีกเลยเนื่องจากไม่มีการเปลี่ยนแปลง คุณสามารถกำจัดฟิลด์ "บุคคล" ได้หากคุณไม่ต้องการจริงๆ ในกรณีนี้สิ่งที่คุณต้องการคือช่อง "mypswd" ซึ่งอาจเปลี่ยนแปลงได้ในลักษณะที่ผู้ใช้เว็บเพจของคุณรู้จัก


0

วิธีเดียวที่ฉันจะได้รับ firefox, edge และ Internet explorer เพื่อปิดการเติมข้อความอัตโนมัติคือการเพิ่ม autocomplete = "false" ในคำสั่งแบบฟอร์มของฉันเช่น:

  <form action="postingpage.php" autocomplete="false" method="post">

และฉันต้องเพิ่มการเติมข้อความอัตโนมัติ = "ปิด" ในการป้อนแบบฟอร์มของฉันและเปลี่ยนประเภทเป็นข้อความเช่น:

     <input type="text" autocomplete="off">

ดูเหมือนว่าโค้ด html นี้จะต้องเป็นมาตรฐานสำหรับเบราว์เซอร์ ควรแก้ไขแบบฟอร์ม = รหัสผ่านเพื่อให้แทนที่การตั้งค่าเบราว์เซอร์ ปัญหาเดียวที่ฉันมีคือฉันสูญเสียการมาสก์อินพุตของฉัน แต่ในด้านสว่าง "ไซต์นี้ไม่ปลอดภัย" ที่น่ารำคาญไม่ปรากฏใน firefox

สำหรับฉันมันไม่ใช่เรื่องใหญ่เนื่องจากผู้ใช้ได้รับการรับรองความถูกต้องแล้วและเป็นส่วนการเปลี่ยนชื่อผู้ใช้และรหัสผ่านของฉัน


2
อย่าทำอย่างนี้. ข้อมูลจะยังคงส่งในรูปแบบข้อความธรรมดาผ่านเครือข่ายซึ่งเป็นปัญหาทั้งหมดกับ HTTP (ไม่ใช่ HTTPS) ในตอนแรกด้วยเหตุนี้ข้อความเตือน "น่ารำคาญ" ของคุณ ไม่สร้างความแตกต่างที่ผู้ใช้ได้รับการรับรองความถูกต้องแล้วเนื่องจาก Man In The Middle ยังคงสามารถมองเห็นข้อมูลข้อความธรรมดาได้และการบันทึกฝั่งเซิร์ฟเวอร์อาจได้รับการกำหนดค่าแตกต่างกัน (สามารถจัดเก็บส่วนหัวของคำขอในขณะที่มีปัญหาอื่น ๆ ร่วมด้วยหากจะจัดเก็บ POST ข้อมูลภายใต้ HTTPS)
Jacob

https เข้ารหัสการรับส่งข้อมูล หากคุณกำลังใช้สิ่งนี้เป็นส่วนหนึ่งของแอปพลิเคชันอินเทอร์เน็ตที่เป็นสาธารณะคุณต้องดำเนินการต่อไป วิธีการโพสต์ป้องกันการบุ๊กมาร์กและโค้ด php หลาย iframe ภายใน HTML จะป้องกันการแทรก URL ในทางเทคนิคคุณควรใส่พา ธ แบบเต็มหากคุณกำลังปรับใช้ฉันขอแนะนำให้โหลดตัวแปร $ _SESSION พร้อมกับ URL พื้นฐานที่เขียนเป็นข้อความแทนที่จะดูตัวแปร $ _SERVER ควรใช้ $ _SERVER ['HTTP_HOST'] และ $ _SERVER ['PHP_SELF'] ในสภาพแวดล้อมที่ไม่ใช่สาธารณะเท่านั้นเนื่องจากทั้งสองมีช่องโหว่หลายประการ
drtechno

Btw ตัวอย่างของฉันสำหรับระบบปิดที่ไม่ได้เชื่อมต่อกับอินเทอร์เน็ต แต่อย่างใด
drtechno

ไม่มีใครสัมผัสกับการใช้รูปแบบการเข้ารหัสที่ดำเนินการด้วย "java onclick" จากนั้นส่งแบบฟอร์มหลังจากขั้นตอนการเข้ารหัส
drtechno
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.