Kiểu nhập = mật khẩu, không để trình duyệt nhớ mật khẩu


101

Tôi nhớ đã thấy một cách để có một <input type="password" />trình duyệt sẽ không nhắc người dùng lưu mật khẩu. Nhưng tôi đang vẽ một khoảng trống. Có một thuộc tính HTML hoặc một số thủ thuật JavaScript sẽ thực hiện điều này không?


Câu trả lời:


123

Hãy thử sử dụng autocomplete="off". Tuy nhiên, không chắc mọi trình duyệt đều hỗ trợ nó. Tài liệu MSDN tại đây .

CHỈNH SỬA : Lưu ý: hầu hết các trình duyệt đã bỏ hỗ trợ cho thuộc tính này. Xem Autocomplete = "off" có tương thích với tất cả các trình duyệt hiện đại không?

Đây được cho là thứ nên được để cho người dùng hơn là người thiết kế trang web.


2
Bạn cũng có thể phân phối trang bằng HTTPS và thông qua tiêu đề HTTP hoặc thẻ META ngăn chặn bộ nhớ đệm. Bằng cách đó, mật khẩu cũng sẽ không được lưu trữ (ít nhất là trong Internet Explorer).
doekman

Liên quan đến xác thực, HTML5 thêm thuộc tính tự động hoàn thành vào thông số kỹ thuật nên hiện tại nó ổn
VictorySaber

9
Lưu ý cho người đọc trong tương lai: Tất cả các trình duyệt chính đang tiến tới việc bỏ qua thuộc tính. (xem stackoverflow.com/a/21348793/37706 )
rdans

@RyanDansie cảm ơn vì đã chỉ ra điều đó. Tôi đã cập nhật câu trả lời. Câu trả lời cũ là ... cũ.
tvanfosson

8
"Đây được cho là thứ nên được để cho người dùng hơn là người thiết kế trang web." có cả lý do kỹ thuật và phi kỹ thuật cho việc này. Ví dụ, mật khẩu dùng một lần không nên nhớ. Các trang web ngân hàng có "nhập số đầu tiên của mã PIN" là một trang khác. Đừng quên rằng một nhà phân tích kinh doanh có thể quyết định anh ta muốn một trường mật khẩu và loại bỏ lựa chọn khỏi nhà phát triển.
Sprague

61

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

Tôi chỉ muốn nói thêm rằng với tư cách là một người dùng, tôi nghĩ rằng điều này rất khó chịu và rắc rối cần khắc phục. Tôi thực sự khuyên bạn không nên sử dụng điều này vì nó có nhiều khả năng sẽ làm trầm trọng thêm người dùng của bạn.

Mật khẩu đã không được lưu trữ trong MRU và các máy công cộng được định cấu hình chính xác thậm chí sẽ không lưu tên người dùng.


23
+1 cho "không làm phiền người dùng của bạn". Đó chính xác là những gì loại tính năng này làm. Cũng giống như các trang web buộc tắt bộ nhớ đệm để nút quay lại xóa biểu mẫu. CỰC KỲ khó chịu.
cletus

6
+1 Tôi hoàn toàn đồng ý. Nó dành cho quản trị viên chỉnh sửa trang hồ sơ khách hàng, nơi bạn chỉ nhập mật khẩu nếu bạn định thay đổi nó. Bằng cách đó, các quản trị viên không thay đổi mật khẩu mỗi khi họ vào chỉnh sửa thông tin của khách hàng.
DavGarcia

14
Nó rất hữu ích cho các trường số thẻ tín dụng. Biểu mẫu của PayPal được lưu trữ trong mọi trình duyệt và bất kỳ ai sử dụng máy tính của bạn đều có thể nhập lại tất cả dữ liệu, vì vậy bạn phải xóa thủ công tất cả các trường đã nhớ.
Egor Pavlikhin

31
Trên một biểu mẫu mà người dùng có thể đặt mật khẩu không liên quan gì đến thông tin đăng nhập của họ, bật tự động điền thực sự là tùy chọn khó chịu hơn - trình duyệt có thể đề nghị lưu một mật khẩu mà nó thực sự không thể làm được gì. Ngoài ra, nếu bảo mật là một vấn đề nhạy cảm, tôi sẽ không cho rằng tất cả các máy công cộng đều được định cấu hình chính xác.
jrb

3
Tôi đang sử dụng cái này cho mật khẩu sử dụng một lần. Như jrb đã nói, sẽ rất khó chịu nếu trình duyệt lưu trữ nó.
Danation

12

Tôi đã giải quyết theo một cách khác. Bạn có thể thử điều này.

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

#cách khác

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

// bạn cần thêm thuộc tính autocomplete = "off" hoặc bạn có thể thêm class .auto-complete-off vào ô nhập liệu và tận hưởng

Thí dụ:

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

4
Điều này ngăn trình duyệt lưu trữ mật khẩu thay vì ngăn tự động hoàn thành, đây là giải pháp tốt hơn trong trường hợp của tôi.
Pau Fracés

Cảm ơn, đã làm việc cho tôi trên chrome mới nhất Xin lưu ý: Được sử dụng trên hệ thống nội bộ chỉ Chrome được phép, hãy kiểm tra thêm nếu sử dụng trong trang web sản xuất.
Izion

@AntoVinish, tôi hy vọng giải pháp cuối cùng của tôi hoạt động trong firefox 40.
Sarwar Hasan

7

Tôi đã thử những cách sau và có vẻ như nó hoạt động với mọi trình duyệt:

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

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

Cách này an toàn hơn nhiều so với việc sử dụng các kỹ thuật hết thời gian chờ, vì nó đảm bảo rằng trường đầu vào sẽ chuyển thành mật khẩu khi người dùng lấy tiêu điểm.


5

Đối với các vấn đề bảo mật, đây là những gì chuyên gia tư vấn bảo mật sẽ cho bạn biết về toàn bộ vấn đề (đây là từ một cuộc kiểm toán bảo mật độc lập thực tế):

HTML Autocomplete Enabled - Các trường mật khẩu trong biểu mẫu HTML đã bật tính năng tự động điền. Hầu hết các trình duyệt đều có cơ sở để ghi nhớ thông tin đăng nhập của người dùng được nhập vào các biểu mẫu HTML.

Rủi ro tương đối: Thấp

Hệ thống / Thiết bị bị ảnh hưởng: o https: // * ** * *** /

Tôi cũng đồng ý rằng điều này sẽ bao gồm bất kỳ trường nào chứa dữ liệu thực sự riêng tư. Tôi cảm thấy rằng việc buộc một người luôn nhập thông tin thẻ tín dụng, mã CVC, mật khẩu, tên người dùng, v.v. của họ là hoàn toàn ổn bất cứ khi nào trang web đó truy cập vào bất kỳ thứ gì cần được bảo mật [phổ biến hoặc theo yêu cầu tuân thủ pháp luật]. Ví dụ: biểu mẫu mua hàng, trang web ngân hàng / tín dụng, trang web thuế, dữ liệu y tế, liên bang, hạt nhân, v.v. - không phải Trang web như Stack Overflow hoặc Facebook.

Các loại trang web khác - ví dụ: TimeStar Online để theo dõi thời gian vào và ra khỏi công việc - thật ngu ngốc, vì tôi luôn sử dụng cùng một PC / tài khoản tại nơi làm việc, nên tôi không thể lưu thông tin đăng nhập trên trang web đó - thật kỳ lạ là tôi có thể trên Android của mình nhưng không phải trên iPad. Ngay cả những máy tính dùng chung, điều này cũng không quá tệ vì việc bấm giờ vào / ra cho người khác thực sự không làm gì khác ngoài việc làm phiền người giám sát của bạn. (Họ phải vào và xóa những cú đấm sai lầm - chỉ cần chọn không lưu trên PC công cộng).


5
Chỉ cần thêm nhận xét ở đây vì lý do bạn không muốn lưu mật khẩu. Tôi duy trì một trang web có tài khoản người dùng, nơi quản trị viên có thể thay đổi mật khẩu của người dùng. Khách hàng hiện đang rất tức giận khi Chrome đề nghị lưu mật khẩu đã nhập trên biểu mẫu "thay đổi mật khẩu" mỗi lần cho mọi người dùng , vì nó xác định sai biểu mẫu người dùng chỉnh sửa làm biểu mẫu đăng nhập. Rõ ràng là đưa ra những hướng dẫn đơn giản như "chỉ cần nhấp vào Không bao giờ nhớ mật khẩu".
charredUtensil

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

Của bạn đây.


2
Đây là cách giải quyết, có rất nhiều cách giải quyết trên mạng và nó đơn giản như thế này, được thử nghiệm với phiên bản mới nhất của Firefox (v67) và Chrome (75).
Mariano Ruiz

Chrome 80 sẽ vẫn đề nghị ghi nhớ mật khẩu sau khi gửi biểu mẫu.
Bouke

4

Đây là câu trả lời hay nhất và dễ nhất! Đặt một trường mật khẩu bổ sung trước inputtrường của bạn và đặt display:none, để khi trình duyệt điền vào, nó sẽ thực hiện nó tronginput mà bạn không quan tâm.

Thay đổi điều này:

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

đến điều này:

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

Trên thực tế, nó hoạt động nếu 2 lĩnh vực mật khẩu ở dạng, nhưng trình duyệt mới bỏ qua mật khẩu thứ 2 nếu không nhìn thấy được và kích hoạt; (
Cedric Simon

1
Việc sử dụng display:nonekhông hoạt động đối với tôi (Chrome 61 OSX), nhưng điều này có hiệu quả:<input type="password" style="position: absolute; top: -1000px;">
John Hascall 13/1217

2

Đọc thêm câu trả lời này khi anh ấy đang sử dụng giải pháp dễ dàng hoạt động ở mọi nơi (xem thêm bản sửa lỗi cho Safari di động):

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

1

Bạn có thể sử dụng JQuery, chọn mục theo id:

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

Hoặc chọn mặt hàng theo loại:

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

Hoặc cũng có thể:

Bạn có thể sử dụng Javascript thuần túy:

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

1

bạn cũng có thể sử dụng nó như sau

$('#Password').attr("autocomplete", "off");
setTimeout('$("#Password").val("");', 2000);

1

thấy là autocomplete = off không được dùng nữa, tôi đề xuất một giải pháp mới hơn.

Đặt trường mật khẩu của bạn thành trường văn bản bình thường và che đầu vào của bạn bằng "đĩa" bằng cách sử dụng CSS. mã sẽ trông như thế này:

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

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

Xin lưu ý rằng điều này có thể không hoạt động dựa trên các trình duyệt firefox và cần có một lối đi vòng bổ sung. Đọc thêm về nó tại đây: https://stackoverflow.com/a/49304708/5477548 .

Giải pháp được lấy từ liên kết này , nhưng để tuân thủ SO "no-hotlinks", tôi đã tóm tắt nó ở đây.


0

Trong trường hợp của hầu hết các trình duyệt chính, có đầu vào bên ngoài và không được kết nối với bất kỳ hình thức nào khiến trình duyệt nghĩ rằng không có trình duyệt. Trong trường hợp này, bạn sẽ phải sử dụng xác thực JS thuần túy để đăng nhập và mã hóa mật khẩu của bạn cũng sẽ cần thiết.

Trước:

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

Sau:

<input type="password"/>

1
Nhân tiện, đây là một thủ thuật có lẽ bạn không nên sử dụng. Bằng cách không sử dụng thẻ biểu mẫu, mã của bạn trở thành HTML4 theo mặc định và khiến việc xác thực tài khoản của người dùng trở nên khó khăn hơn.
Cannicide

0

Tôi đã tìm thấy các hoạt động sau đây trên Firefox và 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>

Tất cả những điều này đều nằm trong phần biểu mẫu. "person" và "mypswd" là những gì bạn muốn, nhưng trình duyệt sẽ lưu "userid" và "passwd" một lần và không bao giờ lưu lại vì chúng không thay đổi. Bạn có thể loại bỏ trường "người" nếu bạn không thực sự cần nó. Trong trường hợp đó, tất cả những gì bạn muốn là trường "mypswd", trường này có thể thay đổi theo một cách nào đó mà người dùng trang web của bạn biết.


0

Cách duy nhất tôi có thể yêu cầu firefox, edge và Internet explorer tắt tính năng tự động hoàn thành là thêm autocomplete = "false" trong câu lệnh biểu mẫu của tôi như:

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

và tôi phải thêm autocomplete = "off" vào đầu vào biểu mẫu của mình và thay đổi loại thành văn bản Như:

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

Có vẻ như mã html này cần được chuẩn hóa với các trình duyệt. loại biểu mẫu = mật khẩu nên được sửa đổi để nó ghi đè cài đặt trình duyệt. Vấn đề duy nhất tôi gặp phải là tôi đã mất mặt nạ đầu vào của mình. Nhưng mặt sáng sủa là "trang web này không an toàn" khó chịu không hiển thị trong firefox.

đối với tôi, đó không phải là vấn đề lớn vì người dùng đã được xác thực và phần tên người dùng và mật khẩu thay đổi của tôi


2
KHÔNG LÀM ĐIỀU NÀY. Dữ liệu sẽ vẫn được gửi ở dạng bản rõ qua mạng, đây là toàn bộ vấn đề với HTTP (không phải HTTPS) ngay từ đầu, do đó thông báo cảnh báo "khó chịu" của bạn. Không có gì khác biệt khi người dùng đã được xác thực vì Người đàn ông ở giữa vẫn có thể thấy dữ liệu văn bản rõ ràng và việc ghi nhật ký phía máy chủ có thể được định cấu hình khác (có thể lưu trữ các tiêu đề yêu cầu, trong khi có những vấn đề khác hoàn toàn nếu nó đã lưu POST dữ liệu dưới HTTPS).
Jacob

https mã hóa lưu lượng. Nếu bạn đang sử dụng ứng dụng này như một phần của ứng dụng Internet công khai, bạn sẽ thực hiện việc này. Phương pháp đăng ngăn chặn đánh dấu trang và nhiều khung nội tuyến của mã php bên trong HTML ngăn chặn việc đưa vào URL. Về mặt kỹ thuật, bạn phải đặt đường dẫn đầy đủ của mình vào. Nếu bạn đang triển khai thì tôi khuyên bạn nên tải biến $ _SESSION với url cơ sở được viết bằng văn bản thay vì xem các biến $ _SERVER. $ _SERVER ['HTTP_HOST'] và $ _SERVER ['PHP_SELF'] chỉ nên được sử dụng trong môi trường không công khai vì cả hai đều có một số khai thác.
drtechno

Btw, ví dụ của tôi là cho các hệ thống khép kín mà không phải kết nối với internet bằng mọi cách
drtechno

không ai đề cập đến việc sử dụng lược đồ mã hóa được thực thi bằng "java onclick", sau đó gửi biểu mẫu sau quy trình mã hóa.
drtechno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.