Câu hỏi Làm thế nào để bạn vô hiệu hóa trình duyệt Tự động điền trên trường biểu mẫu web / thẻ đầu vào?


Làm thế nào để bạn vô hiệu hóa autocomplete trong các trình duyệt chính cho một input (hoặc là form field)?


2260
2017-08-05 16:22


gốc


Một cách sử dụng khác bao gồm các biểu mẫu quản trị để tạo hoặc chỉnh sửa người dùng; bạn không muốn biểu mẫu được điền trước bằng thông tin xác thực hiện tại của bạn. Điều này cũng áp dụng cho các hình thức thay đổi mật khẩu, đặc biệt. những thiết kế như để trống để giữ mật khẩu hiện tại. - Álvaro González
Một lý do khác mà bạn muốn thực hiện điều này là mật khẩu, hình ảnh xác thực và thông tin thẻ tín dụng không được điền vào. - Jeff Atwood
cũng lưu ý rằng một số kiểm tra thâm nhập yêu cầu tắt tự động hoàn tất trên các trường nhất định - Jeff Atwood
Hãy suy nghĩ cẩn thận về điều này. Bạn có thể vô hiệu hóa việc tiết kiệm thông tin thẻ tín dụng, nhưng trừ khi bạn là ngân hàng, ngăn chặn tự động điền mật khẩu có thể làm giảm đáng kể số lượng người dùng đăng nhập vào trang web của bạn, đặc biệt là trên điện thoại nhập mật khẩu trên bàn phím bị chật hẹp. - John Mellor
Nó có thể là một điều thực sự hợp lệ trong các tình huống khác - chẳng hạn như trong các hình thức quản lý người dùng - thêm / cập nhật người dùng - bạn hầu như không bao giờ muốn mật khẩu được tự động hoàn tất khi xác định nhóm người dùng trong một hệ thống lớn. - Dave Amphlett


Các câu trả lời:


Firefox 30 bỏ qua autocomplete="off" đối với mật khẩu, hãy chọn nhắc người dùng thay cho dù mật khẩu có được lưu trữ trên máy khách hay không. Lưu ý những điều dưới đây bình luận từ ngày 5 tháng 5 năm 2014:

  • Trình quản lý mật khẩu luôn luôn sẽ nhắc nếu nó muốn lưu mật khẩu. Mật khẩu không được lưu mà không có sự cho phép của người dùng.
  • Chúng tôi là trình duyệt thứ ba để thực hiện thay đổi này, sau IE và Chrome.

Theo Tài liệu dành cho nhà phát triển Mozilla thuộc tính phần tử biểu mẫu autocomplete ngăn không cho dữ liệu biểu mẫu được lưu trong các trình duyệt cũ hơn.

<input type="text" name="foo" autocomplete="off" />

2219
2017-08-05 16:24



Điều này đã không làm việc cho tôi trong Firefox 3.0.3 tôi đã phải đặt thuộc tính tự động hoàn thành trong MẪU chứ không phải là INPUT. - Winston Fassett
Tự động hoàn thành chỉ được xác định trong các tiêu chuẩn HTML 5, do đó, nó sẽ phá vỡ mọi xác thực bạn chạy với HTML 4. * ... - Jrgns
@ Winston, bạn nên đặt cả hai trên biểu mẫu, VÀ trên phần tử đầu vào chính nó. Bằng cách đó bạn bao gồm tất cả các trình duyệt không chuẩn. - AviD
Và hãy nhớ tắt autocomplete = on tiện ích (nếu bạn đang sử dụng Chrome) trước khi bạn kiểm tra ứng dụng web của mình. Khác bạn sẽ cảm thấy thực sự ngớ ngẩn như tôi. ;) - Jo Liss
autocomplete = "<mọi thứ nhưng bật hoặc tắt công trình>" - swapab


Ngoài autocomplete=off, bạn cũng có thể có tên trường của biểu mẫu được phân ngẫu nhiên bằng mã tạo trang, có thể bằng cách thêm một số chuỗi phiên cụ thể vào cuối tên.

Khi biểu mẫu được gửi, bạn có thể xóa phần đó ra trước khi xử lý chúng ở phía máy chủ. Điều này sẽ ngăn chặn trình duyệt web tìm ngữ cảnh cho trường của bạn và cũng có thể giúp ngăn chặn các cuộc tấn công XSRF vì kẻ tấn công sẽ không thể đoán được tên trường cho việc gửi biểu mẫu.


248
2017-10-20 13:36



Đây là một giải pháp tốt hơn nhiều so với sử dụng autocomplete = "off". Tất cả những gì bạn phải làm là tạo một tên mới trên mỗi lần tải trang và lưu tên đó vào $ _SESSION để sử dụng trong tương lai: $_SESSION['codefield_name'] = md5(uniqid('auth', true)); - enchance
Không, đây không phải là giải pháp tốt hơn, vì nguồn gốc của tùy chọn cho cài đặt này là tác nhân người dùng còn được gọi là trình duyệt web. Có một sự khác biệt giữa việc hỗ trợ hành vi nhất định (mà HTML 5 cố gắng làm) và buộc nó bằng cách quyết định thay mặt cho người dùng, mà bạn đề xuất là một "giải pháp tốt hơn nhiều". - amn
Giải pháp này có thể làm việc với tất cả các trình duyệt, do đó, trong khía cạnh đó nó là "tốt hơn". Tuy nhiên, amn là chính xác, việc quyết định tắt tự động điền thay mặt cho người dùng của bạn không phải là một ý tưởng hay. Điều này có nghĩa là tôi sẽ chỉ vô hiệu hóa tự động điền trong các tình huống rất cụ thể, chẳng hạn như khi bạn có kế hoạch xây dựng chức năng tự động hoàn thành của riêng bạn và không muốn xung đột hoặc hành vi lạ. - macguru2000
Liên quan đến các cuộc tấn công XSRF, tôi không chắc chắn loại tấn công nào bạn đang hình dung, nhưng liệu kẻ tấn công có thể loại bỏ phần cuối cùng giống như cách bạn thực hiện phía máy chủ để xác định các trường không? Hoặc nếu kẻ tấn công đang đăng các trường, họ có thể nối thêm chuỗi ngẫu nhiên của riêng mình vì nó sẽ bị máy chủ tước đi không? - xr280xr
@ macguru2000 xây dựng tự động hoàn thành của riêng bạn là một trường hợp sử dụng hoàn toàn hợp pháp và phổ biến. Thực sự trình duyệt sẽ giúp các nhà phát triển dễ dàng tắt tính năng tự động hoàn tất khi họ cần thay vì buộc chúng tôi sử dụng các hack như thế này - whoadave


Hầu hết các trình duyệt và trình quản lý mật khẩu chính (chính xác, IMHO) hiện bỏ qua autocomplete=off.

Tại sao? Nhiều ngân hàng và các trang web "bảo mật cao" khác được thêm vào autocomplete=off đến trang đăng nhập của họ "vì mục đích bảo mật" nhưng điều này thực sự làm giảm bảo mật vì nó khiến mọi người thay đổi mật khẩu trên các trang web bảo mật cao này để dễ nhớ (và do đó crack) vì tự động hoàn tất bị hỏng.

Cách đây rất lâu, hầu hết các trình quản lý mật khẩu đã bắt đầu bỏ qua autocomplete=offvà bây giờ các trình duyệt bắt đầu thực hiện tương tự cho đầu vào tên người dùng / mật khẩu.

Rất tiếc, các lỗi trong quá trình triển khai tự động hoàn tất chèn tên người dùng và / hoặc thông tin mật khẩu vào các trường biểu mẫu không phù hợp, gây ra lỗi xác thực biểu mẫu hoặc tệ hơn, vô tình chèn tên người dùng vào các trường được cố ý để trống bởi người dùng.

Nhà phát triển web phải làm gì?

  • Nếu bạn có thể tự giữ tất cả các trường mật khẩu trên một trang, đó là một khởi đầu tuyệt vời vì có vẻ như sự hiện diện của trường mật khẩu là trình kích hoạt chính cho người dùng / tự động điền để khởi động. Nếu không, hãy đọc các mẹo bên dưới.
  • Safari thông báo rằng có 2 trường mật khẩu và vô hiệu hóa tính năng tự động hoàn tất trong trường hợp này, giả sử nó phải là biểu mẫu thay đổi mật khẩu, không phải là biểu mẫu đăng nhập. Vì vậy, chỉ cần chắc chắn sử dụng 2 trường mật khẩu (mới và xác nhận mới) cho bất kỳ biểu mẫu nào bạn cho phép
  • Chrome 34, thật không may, sẽ cố gắng tự động điền các trường bằng user / pass bất cứ khi nào nó nhìn thấy một trường mật khẩu. Đây là một lỗi khá tệ, hy vọng chúng sẽ thay đổi hành vi của Safari. Tuy nhiên, việc thêm phần này vào đầu biểu mẫu của bạn dường như vô hiệu hóa tính năng tự động điền mật khẩu:

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

Tôi chưa nghiên cứu kỹ IE hay Firefox nhưng sẽ vui lòng cập nhật câu trả lời nếu người khác có thông tin trong phần bình luận.


187
2018-04-23 04:00



ý của bạn là "thêm điều này trên trang của bạn có vẻ như tắt tính năng tự động điền cho trang:" - wutzebaer
@wutzebaer, Chrome sẽ nhận thấy trường mật khẩu ẩn và tạm dừng tự động hoàn tất. Được biết đây là để ngăn chặn các trang web ăn cắp thông tin mật khẩu mà không cần người dùng nhận thấy. - David W
Đoạn mã của bạn ngăn tự động hoàn thành cho các trường đăng nhập trên Chrome, Firefox, IE 8 và IE 10. Không kiểm tra IE 11. Tốt thứ! Chỉ có câu trả lời đơn giản mà vẫn hoạt động. - Sam Watkins
Ghi chú safari của bạn dường như cũng hoạt động trên Chrome, ít nhất là vào tháng 12 năm 2015. Tôi đã có trường tên người dùng và mật khẩu trên biểu mẫu đăng ký tự động hoàn thành với dữ liệu từ biểu mẫu đăng nhập. Tạo hai type='password' các trường trên một trang gây ra tự động hoàn thành "lưu mật khẩu" của trình duyệt bị bỏ qua, điều này tạo ra một tải trọng đầy ý nghĩa vì biểu mẫu đăng ký có xu hướng yêu cầu mật khẩu hai lần khi biểu mẫu đăng nhập chỉ yêu cầu một lần. - Matt Fletcher
Dường như không hoạt động trong Chrome 55 nữa, trừ khi trường mật khẩu thừa không bị ẩn, điều này sẽ đánh bại mục đích. - jokkedk


Đôi khi thậm chí tự động hoàn thành = tắt sẽ không ngăn chặn để lấp đầy trong thông tin đăng nhập vào các trường sai, nhưng không phải trường người dùng hoặc biệt hiệu.

Cách giải quyết này là ngoài bài đăng của apinstein về hành vi của trình duyệt.

sửa tự động điền trình duyệt ở chế độ chỉ đọc và đặt có thể ghi trên tiêu điểm (nhấp và tab)

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

Cập nhật: Mobile Safari đặt con trỏ vào trường, nhưng không hiển thị bàn phím ảo. Sửa chữa mới hoạt động như trước nhưng xử lý bàn phím ảo:

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

Bản thử trực tiếp https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Bởi vì Trình duyệt tự động điền thông tin đăng nhập vào trường văn bản sai?

Tôi nhận thấy hành vi kỳ lạ này trên Chrome và Safari, khi có trường mật khẩu trong cùng một hình thức. Tôi đoán, trình duyệt tìm kiếm một trường mật khẩu để chèn thông tin đăng nhập đã lưu của bạn. Sau đó, nó tự động điền (chỉ cần đoán do quan sát) trường nhập văn bản gần nhất, xuất hiện trước trường mật khẩu trong DOM. Vì trình duyệt là trường hợp cuối cùng và bạn không thể kiểm soát nó,

Điều này sửa chữa chỉ đọc ở trên làm việc cho tôi.


120
2018-06-16 16:04



An nếu không có javascript thì toàn bộ biểu mẫu không thành công. -1 - Jimmy Kane
@JimmyKane chìa khóa sẽ là cũng thêm các thuộc tính bằng cách sử dụng javascript ở nơi đầu tiên (mà dsuess đã không thực hiện ở đây, nhưng chỉ cần thêm vì lợi ích đầy đủ). - trnelson
@tmelson Tôi hiểu nhưng vẫn còn lý do tại sao sử dụng js để thậm chí vô hiệu hóa? Hãy tránh js cho những thứ có thể được cải thiện nguyên bản. Một lần nữa tôi đồng ý với bạn mặc dù. - Jimmy Kane
Điều này không hoạt động ngay trong IE8, trường mật khẩu chỉ đọc không thể chỉnh sửa được trong lần đầu tiên bạn tập trung vào nó, chỉ sau khi bạn không tập trung và lấy nét lại. Ý tưởng hay, nhưng tiếc là nó hơi quá khó và không an toàn để sử dụng. - Sam Watkins
Điều này không không phải hoạt động chính xác trên tất cả các trình duyệt (ví dụ: IE 11 & IE Edge). Ngay sau khi readonly được loại bỏ, lựa chọn tiếp theo của các kết quả trường trong trả lại tự động hoàn tất. - Gone Coding


<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

Điều này sẽ làm việc trong Internet Explorer và Mozilla FireFox, nhược điểm là nó không phải là chuẩn XHTML.


93
2017-08-05 16:27



Tôi đã nhận thấy rằng việc thêm nó vào phần tử biểu mẫu không phải lúc nào cũng ngăn không cho nó được áp dụng cho các đầu vào riêng lẻ trong biểu mẫu. Do đó, có lẽ tốt nhất là đặt nó trực tiếp trên phần tử đầu vào. - sholsinger
Trên thực tế @sholsinger, tốt nhất là đặt cả hai trên biểu mẫu, VÀ trên phần tử đầu vào chính nó. Bằng cách đó bạn bao gồm tất cả các trình duyệt không chuẩn. - AviD
Đáng buồn thay, như của IE 11, Microsoft không còn tôn trọng điều này vì input type="password". Hy vọng rằng không có trình duyệt nào khác chọn xóa chức năng này. - SamHuckaby
Cài đặt autocomplete="off" trên form là thứ duy nhất làm việc cho Chrome. - Andrew


Giải pháp cho Chrome là thêm autocomplete="new-password" vào mật khẩu loại đầu vào.

Thí dụ:

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

Chrome luôn tự động hoàn tất dữ liệu nếu nó tìm thấy một hộp nhập mật khẩu, chỉ đủ để cho biết hộp đó autocomplete = "new-password".

Công việc này phù hợp với tôi.

Lưu ý: đảm bảo với F12 rằng các thay đổi của bạn có hiệu lực, nhiều lần trình duyệt lưu trang trong bộ nhớ cache, điều này đã cho tôi một ấn tượng xấu rằng nó không hoạt động, nhưng trình duyệt không thực sự mang lại thay đổi.


57
2017-11-24 17:07



Tính năng này cũng hoạt động trong Chrome đối với các loại trường khác, không chỉ gõ = "mật khẩu". - Jake
Tôi đã sử dụng nó với mật khẩu, email và các loại văn bản và nó hoạt động. Tôi đã sử dụng nó đơn giản như sau: autocomplete = "new" - Crak_mboutin
Nó không hoạt động với v63 chrome - Palaniichuk Dmytro


Như những người khác đã nói, câu trả lời là autocomplete="off"

Tuy nhiên, tôi nghĩ nó đáng nói tại sao bạn nên sử dụng điều này trong một số trường hợp nhất định vì một số câu trả lời cho điều này và bản sao câu hỏi đã gợi ý tốt hơn là không tắt nó đi.

Việc dừng trình duyệt lưu trữ số thẻ tín dụng không được để lại cho người dùng. Quá nhiều người dùng thậm chí sẽ không nhận ra đó là một vấn đề.

Điều đặc biệt quan trọng là tắt nó trên các lĩnh vực mã bảo mật thẻ tín dụng. Như trang này tiểu bang:

"Không bao giờ lưu trữ mã bảo mật ... giá trị của nó phụ thuộc vào giả định rằng cách duy nhất để cung cấp nó là đọc nó từ thẻ tín dụng thực, chứng minh rằng người cung cấp nó thực sự nắm giữ thẻ."

Vấn đề là, nếu đó là máy tính công cộng (quán cà phê Internet, thư viện, vv) thì người dùng khác sẽ dễ dàng lấy cắp chi tiết thẻ của bạn và thậm chí trên máy của riêng bạn, một trang web độc hại có thể ăn cắp dữ liệu tự động hoàn tất.


53
2018-01-23 21:21



nếu tôi đã đi đến một trang web và nó nhớ thẻ của tôi trong danh sách thả xuống, tôi sẽ rất không hài lòng. id bắt đầu tự hỏi làm thế nào họ có thể bất cẩn như vậy. - Simon_Weaver
Đơn giản hơn / nhiều trường hợp quan trọng hơn. Khi tôi truy cập trang của người dùng trên phần quản trị của trang web của tôi, nó sẽ cố đặt tên người dùng và mật khẩu của họ làm tên người dùng và mật khẩu quản trị của tôi, không thể cho biết đây không phải là biểu mẫu đăng nhập. Tôi muốn mật khẩu quản trị của mình được ghi nhớ, nhưng đó là một lỗi nghiêm trọng mà nó cố gắng áp dụng tên người dùng / mật khẩu đã nhớ đó cho bất kỳ người dùng nào mà tôi sau đó chỉnh sửa. - rjmunro


Tôi phải cầu xin sự khác biệt với những câu trả lời mà nói để tránh vô hiệu hóa tự động hoàn thành.

Điều đầu tiên mang lại là tự động hoàn thành không bị vô hiệu hóa rõ ràng trên các trường biểu mẫu đăng nhập là một PCI-DSS không thành công. Ngoài ra, nếu máy tính cục bộ của người dùng bị xâm phạm thì bất kỳ dữ liệu tự động điền nào cũng có thể được thu thập một cách trivially bởi kẻ tấn công do nó được lưu trữ trong suốt.

Có chắc chắn là một đối số cho khả năng sử dụng, tuy nhiên có một sự cân bằng rất tốt khi nói đến các lĩnh vực hình thức nên có tự động hoàn thành vô hiệu hóa và không nên.


29
2017-09-17 00:33



Nó đã chỉ đến sự chú ý của tôi rằng IE không kích hoạt các sự kiện onChange khi bạn điền vào một đầu vào văn bản bằng cách sử dụng AutoComplete. Chúng tôi đã có hàng chục biểu mẫu và hơn một nghìn sự kiện onChange (xác thực đầu vào, logic nghiệp vụ) phân tán trên tất cả chúng. Gần đây, chúng tôi đã nâng cấp IE lên phiên bản mới hơn và tất cả những điều kỳ lạ bất ngờ bắt đầu xảy ra. May mắn là chúng tôi đang chạy một ứng dụng mạng nội bộ và tự động hoàn tất không phải là vấn đề UX đối với chúng tôi, việc tắt nó đi dễ dàng hơn. - Robotron
Nếu một máy tính cục bộ của người dùng bị xâm nhập, chúng sẽ bị hỏng, thời gian. Nó có thể có một keylogger được cài đặt, nó có thể có một chứng chỉ gốc SSL giả được thêm vào và mọi thứ được gửi qua proxy giả vv. Tôi có lý do thực sự để vô hiệu hóa tính năng tự động hoàn thành - Khi tôi đăng nhập với tư cách quản trị viên và truy cập trang chỉnh sửa người dùng, nó gán tên người dùng và mật khẩu quản trị viên của tôi. Tôi cần phải ngăn chặn hành vi này. - rjmunro
Các nhà cung cấp trình duyệt dường như đang tìm kiếm lợi ích riêng của họ. Mật khẩu đã lưu = khóa người dùng. Và tự động hoàn thành bật / tắt quá đơn giản - tại sao không phải là một tiêu chuẩn phức tạp của gợi ý ngữ nghĩa ( html.spec.whatwg.org/multipage/… ), theo cách nào, cho phép trình duyệt thu thập dữ liệu ngữ nghĩa có giá trị từ các trang web mà mỗi người dùng truy cập? - aro_tech
trường hợp sử dụng cụ thể mà tôi đang cố gắng giải quyết là: họ đã đăng nhập. Nhưng bây giờ họ sắp truy cập một thứ nhạy cảm hơn. Tôi muốn hiển thị một hộp thoại làm cho họ tái xác thực, chống lại khả năng họ bước đi để có một làn khói và một người xấu ngồi xuống trên ghế của họ. đã thử một số kỹ thuật để đánh bại tự động hoàn thành và không có gì hoạt động. bây giờ tôi đang suy nghĩ, có lẽ, ít nhất, sử dụng tốt cũ 'password = window.prompt ("Xin vui lòng nhập lại mật khẩu của bạn")' cộng với tên người dùng trong phiên, và cố gắng xác thực điều đó. - David


Ba tùy chọn: Đầu tiên:

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

Thứ hai:

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

Thứ ba (mã javascript):

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

24
2018-03-19 10:05



Tùy chọn đầu tiên và thứ hai phải là một tùy chọn, vì tùy chọn này khác nhau về cách trình duyệt xử lý việc này. - rybo111
Đã thử $ formElement.attr ('autocomplete', 'off'); và nó không hoạt động. - highmaintenance