웹 양식 필드 / 입력 태그에서 브라우저 자동 완성을 어떻게 비활성화합니까?


2789

autocomplete특정 브라우저 input(또는 form field) 에 대해 주요 브라우저에서 어떻게 비활성화 합니까?


2
테스터가 수없이 많은 정보를 수동으로 입력해야하는 일부 시스템에서는 테스트 할 때 비활성화 할 수 있고 'tab> 아래쪽 화살표> tab> 아래쪽 화살표 등을 누르기 위해 구성 가능한 옵션을 갖는 것이 유용 할 수 있습니다. . '
Simon_Weaver

답변:


2623

Firefox 30은 autocomplete="off"암호를 무시 하고 대신 암호를 클라이언트에 저장해야하는지 묻는 메시지를 표시합니다. 2014 년 5 월 5 일 의 다음 주석에 유의하십시오 .

  • 암호 관리자는 항상 암호 를 저장할 것인지 묻습니다. 비밀번호는 사용자의 허가없이 저장되지 않습니다.
  • 우리는 IE와 Chrome에 이어이 변경을 구현 한 세 번째 브라우저입니다.

에 따르면 모질라 개발자 네트워크 문서, 부울 폼 요소 속성 autocomplete방지는 이전 버전의 브라우저에 캐시되는 데이터를 형성한다.

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

45
Firefox 3.0.3에서는 작동하지 않았습니다. 자동 완성 속성을 INPUT이 아닌 FORM에 넣어야했습니다.
Winston Fassett 4

17
자동 완성 기능은 HTML 5 표준에서만 정의되므로 HTML 4 *에 대해 실행하는 모든 유효성 검사가 중단됩니다.
Jrgns

96
@Winston, 양식과 입력 요소 자체에 모두 넣어야합니다. 그렇게하면 브라우저의 모든 비표준을 다룰 수 있습니다.
AviD December

83
webapp를 테스트하기 전에 자동 완성 = 확장 프로그램 (Chrome을 사용하는 경우) 을 비활성화하십시오 . 그렇지 않으면 당신은 나처럼 진짜 바보 같은 느낌이들 것입니다. ;)
Jo Liss


314

뿐만 아니라 autocomplete=off양식 필드 이름을 페이지를 생성하는 코드에 의해 무작위화할 수도 있습니다 (아마도 세션 끝에 문자열을 이름 끝에 추가하여).

양식을 제출하면 서버 측에서 처리하기 전에 해당 부분을 제거 할 수 있습니다. 이렇게하면 웹 브라우저가 해당 필드에 대한 컨텍스트를 찾지 못하고 공격자가 양식 제출에 대한 필드 이름을 추측 할 수 없으므로 XSRF 공격을 방지 할 수 있습니다.


10
이것은 autocomplete = "off"를 사용하는 것과 비교하여 훨씬 더 나은 솔루션입니다. 매번로드 할 때마다 새 이름을 생성하고 나중에 사용할 수 있도록 해당 이름을 $ _SESSION에 저장하면됩니다.$_SESSION['codefield_name'] = md5(uniqid('auth', true));
enchance

78
아니요,이 설정의 기본 설정은 웹 브라우저라고도하는 사용자 에이전트이므로 더 나은 솔루션은 아닙니다. 특정 동작 (HTML 5가 시도하는 것)을 지원하는 것과 사용자를 대신하여 결정하도록 강제하는 것에는 차이가 있습니다. "훨씬 더 나은 솔루션"이라고 제안합니다.
amn

15
이 솔루션은 모든 브라우저에서 작동 할 수 있으므로 "더 나은"점입니다. 여전히 amn은 정확하며 사용자 대신 자동 완성을 사용하지 않도록 결정하는 것은 좋지 않습니다. 즉, 고유 한 자동 완성 기능을 구축하고 충돌이나 이상한 행동을 원하지 않는 경우와 같이 매우 특정한 상황에서만 자동 완성을 비활성화 할 수 있습니다.
macguru2000

8
XSRF 공격과 관련하여 어떤 유형의 공격을 캡처했는지 확실하지 않지만 공격자가 서버 측에서 필드를 식별하는 것과 같은 방식으로 끝 부분을 제거 할 수 없었습니까? 또는 공격자가 필드를 게시하는 경우 서버에 의해 제거되므로 자체 임의 문자열을 추가 할 수 없습니까?
xr280xr

9
@ macguru2000 자신 만의 자동 완성 기능을 구축하는 것은 완전히 합법적이고 일반적인 사용 사례입니다. 실제로 브라우저는 개발자가 이와 같은 핵을 사용하도록 강요하는 대신 자동 완성 기능을 쉽게 해제 할 수 있도록해야합니다.
whoadave

235

대부분의 주요 브라우저 및 암호 관리자 (올바로 IMHO)는 이제 무시 autocomplete=off합니다.

왜? 많은 은행 및 기타 "높은 보안"웹 사이트가 autocomplete=off"보안 목적으로"로그인 페이지에 추가 되었지만 자동 완성 이후 사람들이 보안 수준이 높은 사이트의 암호를 쉽게 기억하고 해독 할 수 있기 때문에 실제로 보안이 저하됩니다. 부서졌다.

오래 전에 대부분의 암호 관리자는 무시하기 시작 autocomplete=off했으며 이제 브라우저는 사용자 이름 / 암호 입력에 대해서만 동일한 작업을 시작합니다.

불행히도 자동 완성 구현의 버그로 인해 사용자 이름 및 / 또는 암호 정보가 부적절한 양식 필드에 삽입되어 양식 유효성 검사 오류가 발생하거나 사용자가 의도적으로 비워 둔 필드에 실수로 사용자 이름을 삽입하는 경우가 있습니다.

웹 개발자는 무엇을해야합니까?

  • 페이지의 모든 비밀번호 필드를 단독으로 유지할 수 있다면, 비밀번호 필드의 존재가 사용자 / 패스 자동 완성에 대한 주요 트리거 인 것처럼 보이기 시작하는 것이 좋습니다. 그렇지 않으면 아래 팁을 읽으십시오.
  • Safari 는 2 개의 비밀번호 필드가 있으며이 경우 로그인 양식이 아닌 비밀번호 변경 양식이어야한다고 가정하면 자동 완성을 비활성화합니다. 따라서 허용되는 모든 양식에 대해 2 개의 비밀번호 필드 (신규 및 신규 확인)를 사용하십시오.
  • 불행히도 Chrome 34는 비밀번호 필드가 표시 될 때마다 사용자 / 패스로 필드를 자동으로 채 웁니다. 이것은 사파리의 행동을 바꿀 수있는 아주 나쁜 버그입니다. 그러나 양식 맨 위에 이것을 추가하면 비밀번호 자동 완성이 사용 중지 된 것으로 보입니다.

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

아직 IE 또는 Firefox를 철저히 조사하지는 않았지만 다른 사람들이 의견에 정보가 있으면 답변을 업데이트하게되어 기쁩니다.


5
"페이지에 이것을 추가하면 페이지에 대한 자동 완성이 비활성화 된 것 같습니다"
wutzebaer

5
@wutzebaer, Chrome은 숨겨진 비밀번호 입력란을 확인하고 자동 완성을 중지합니다. 보고에 따르면 이는 사용자가 알지 못하는 상태에서 사이트가 비밀번호 정보를 훔치는 것을 방지하기위한 것입니다.
David W '

6
코드 스 니펫은 Chrome, Firefox, IE 8 및 IE 10의 로그인 필드에 대한 자동 완성을 방지합니다. IE 11을 테스트하지 않았습니다. 여전히 작동하는 간단한 답변.
Sam Watkins

3
귀하의 사파리 노트는 2015 년 12 월 현재 Chrome에서도 작동하는 것 같습니다. 로그인 양식의 데이터를 자동 완성하는 등록 양식에 사용자 이름 및 비밀번호 필드가 있습니다. type='password'한 페이지에 두 개의 필드를 만들면 브라우저의 "비밀번호 저장"자동 완성이 무시됩니다. 이는 로그인 양식이 비밀번호를 한 번만 요청할 때 등록 양식이 비밀번호를 두 번 요청하는 경향이 있기 때문에 많은 의미가 있습니다.
Matt Fletcher

3
추가 비밀번호 입력란이 숨겨져 있지 않으면 Chrome 55에서 더 이상 작동하지 않는 것 같습니다.
jokkedk

160

때로는 심지어 자동 완성 해제 = 것입니다 채우기 위해 방지 할 사용자 또는 별칭 필드 잘못된 필드에 자격 증명 있지만.

이 해결 방법은 브라우저 동작에 대한 apinstein의 게시물에 추가됩니다.

브라우저 자동 완성을 읽기 전용으로 수정하고 포커스를 쓸 수 있도록 설정 (클릭 및 탭)

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

업데이트 : Mobile Safari는 필드에 커서를 설정하지만 가상 키보드는 표시하지 않습니다. 새로운 수정 사항은 이전과 동일하지만 가상 키보드를 처리합니다.

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

// UpdateEnd

브라우저가 자격 증명을 잘못된 텍스트 필드에 자동으로 채 웁니다!?

동일한 형식의 비밀번호 필드가있을 때 Chrome과 Safari에서이 이상한 동작을 발견했습니다 . 브라우저가 저장된 자격 증명을 삽입하기 위해 암호 필드를 찾습니다. 그런 다음 DOM의 암호 필드 앞에 나타나는 가장 가까운 텍스트 입력 필드를 자동으로 채 웁니다 (관찰 때문에 추측). 브라우저가 마지막 인스턴스이므로 제어 할 수 없으므로

위의 읽기 전용 수정은 저에게 효과적이었습니다.


8
자바 스크립트가 없으면 전체 양식이 실패합니다. -1
Jimmy Kane

8
@JimmyKane 열쇠는 처음에 javascript를 사용하여 속성을 추가하는 것입니다.
trnelson

@ tmelson 이해하지만 여전히 js를 사용하여 비활성화 할 수 있습니까? 기본적으로 개선 될 수있는 것들에 대해서는 js를 피하자. 다시 한 번 나는 당신에게 동의합니다.
Jimmy Kane

3
IE8에서는이 기능이 제대로 작동하지 않으므로 처음 초점을 맞출 때 포커스를 해제하고 다시 초점을 맞춘 후에 만 ​​읽기 전용 암호 필드를 편집 할 수 없습니다. 좋은 생각이지만 안타깝게도 사용하기에 너무 해 키고 안전하지 않습니다.
Sam Watkins

일부 브라우저 (예 : IE 11 및 IE Edge) 에서는 제대로 작동 하지 않습니다 . readonly이 제거 되는 즉시 필드를 선택하면 자동 완성이 반환됩니다.
사라 코딩

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

이것은 Internet Explorer 및 Mozilla FireFox에서 작동하지만 단점은 XHTML 표준이 아니라는 것입니다.


양식 요소에 추가한다고해서 항상 양식 내의 개별 입력에 적용되는 것은 아닙니다. 따라서 입력 요소에 직접 배치하는 것이 가장 좋습니다.
sholsinger

15
실제로 @sholsinger, 폼과 입력 요소 자체에 모두 넣는 것이 가장 좋습니다. 그렇게하면 브라우저의 모든 비표준을 다룰 수 있습니다.
AviD December

2
슬프게도 IE 11부터 Microsoft는 더 이상 이것을 존중하지 않습니다 input type="password". 다른 브라우저는이 기능을 제거하지 않기를 바랍니다.
SamHuckaby

설정 autocomplete="off"온 것은 form크롬 위해 일한 유일한 것입니다.
앤드류

106

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변경 사항이 적용 되는지 확인하십시오. 브라우저가 페이지를 캐시에 저장하는 경우가 많습니다.


2
이것은 type = "password"뿐만 아니라 다른 유형의 필드에서도 Chrome에서 작동합니다.
Jake

암호, 전자 메일 및 텍스트 유형과 함께 사용했으며 작동했습니다. 다음과 같이 간단하게 사용했습니다 : autocomplete = "new"
Crak_mboutin

autocomplete = "nope"name = "pswd"이며 실제 비밀번호 입력 필드 앞에 <input name = "dummyPassword"type = "password"style = "display : none;">을 사용했습니다. 이것은 나를 위해 일했습니다.
Denuka


이것은 Chrome뿐만 아니라 거의 모든 브라우저에서 작동합니다 : autocomplete # Browser_compatibility .
Andrew Morton

60

다른 사람들이 말했듯이 대답은 autocomplete="off"

그러나 일부 사례에 대한 답변과 중복 된 질문으로 인해 끄지 않는 것이 좋습니다. 왜냐하면 특정 경우에 이것을 사용하는 것이 좋은 아이디어 인지 말할 가치가 있다고 생각합니다 .

신용 카드 번호를 저장하는 브라우저를 중지하는 것은 사용자에게 맡겨서는 안됩니다. 너무 많은 사용자는 그것이 문제라는 것을 깨닫지 못할 것입니다.

신용 카드 보안 코드 필드를 끄는 것이 특히 중요합니다. 이 페이지 는 다음과 같이 말합니다.

"보안 코드를 저장하지 마십시오.이 값은 보안 신용 카드를 제공하는 유일한 방법은 실제 신용 카드에서 코드를 읽어야한다는 가정에 따라 달라집니다.이를 제공하는 사람이 실제로 카드를 보유하고 있음을 증명합니다."

문제는 공용 컴퓨터 (사이버 카페, 라이브러리 등) 인 경우 다른 사용자가 카드 세부 정보를 훔치기가 쉽다는 것입니다. 심지어 자신의 컴퓨터에서도 악의적 인 웹 사이트가 자동 완성 데이터를 훔칠있습니다 .


7
내가 사이트에 갔는데 드롭 다운에서 내 카드를 기억하면 매우 불행 할 것입니다. 그들이 어떻게 그렇게 부주의 할 수 있는지 궁금해하기 시작합니다.
Simon_Weaver 5

8
훨씬 더 간단하고 더 중요한 경우. 내 사이트의 관리자 부분에서 사용자 페이지를 방문하면 사용자 이름과 비밀번호를 관리자 이름과 비밀번호로 설정하려고 시도하지만 이것이 로그인 양식이 아니라는 것을 알 수 없습니다. 관리자 비밀번호를 기억하고 싶지만, 기억 한 사용자 이름 / 비밀번호를 내가 편집 한 모든 사용자에게 적용하려고하는 것은 중대한 오류입니다.
rjmunro

34

임의의 문자를 사용하여 Chrome으로 끝없는 싸움을 해결했습니다. 임의 문자열로 항상 자동 완성을 렌더링하면 아무것도 기억되지 않습니다.

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

그것이 다른 사람들에게 도움이되기를 바랍니다.


2
이것은 더 잘 작동합니다. 모든 페이지로드에 대해 임의 코드를 생성하는 작은 JS를 추가하고 해당 코드를 입력 필드에 추가 할 수 있습니다. <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } return autoId; } $ ( '. autocompleteoff'). attr ( 'autocomplete', autoId ()); </ code> autocompleteoff원하는 입력 필드에 클래스를 추가 할 수 있습니다 .
Raghuram Kasyap

크롬에서 작동하지 않음 버전 68.0.3440.106 (공식 빌드) (64 비트)
Sukanya Purushothaman

크롬은 이제 "OFF"표준화를 사용하도록 수정되었습니다

1
슬프게도 크롬에서 표준이라고하는 것보다 더 잘 작동합니다.
Nour Lababidi

1
오늘 Chrome에서 '끄기'로 임의의 문자열을 덮어 씁니다. Chrome 개발자 가이 속성을 잘못하고 제어하지 않는다고 믿을 수 없습니다. 어째서 내
단계

33

자동 완성 기능을 사용 중지하지 않으려면 답변과 다르게 구걸해야합니다.

우선 로그인 양식 필드에서 자동 완성 기능이 명시 적으로 비활성화되지 않는 것은 PCI-DSS 실패라는 것입니다. 또한 사용자의 로컬 컴퓨터가 손상되면 자동 완성 데이터는 일반 컴퓨터에 저장되어 있기 때문에 사소한 것으로 자동 완성 될 수 있습니다.

사용성에 대한 논쟁이 있지만, 어떤 양식 필드가 자동 완성 기능을 비활성화해야하는지, 그렇지 않아야하는지에 대해서는 균형이 잘 잡혀 있습니다.


AutoComplete를 사용하여 텍스트 입력을 채울 때 IE가 onChange 이벤트를 트리거하지 않는다는 점에 주목했습니다. 우리는 수십 개의 양식과 수천 개가 넘는 onChange 이벤트 (입력 유효성 검사, 비즈니스 로직)가 흩어져 있습니다. 최근에 우리는 IE를 최신 버전으로 업그레이드했으며 갑자기 이상한 일이 발생하기 시작했습니다. 운 좋게도 인트라넷 앱을 실행 중이며 자동 완성은 UX 문제가 아니며, 그냥 끄는 것이 더 쉽습니다.
Robotron

3
사용자 로컬 시스템이 손상된 경우 망가져 있습니다. 키 로거가 설치되어있을 수 있으며, 가짜 SSL 루트 인증서가 추가되고 모든 것이 잘못된 프록시 등을 통해 전송 될 수 있습니다. 자동 완성을 비활성화해야하는 실질적인 이유가 있습니다. 해당 사용자 내 관리자 사용자 이름 및 비밀번호. 이 행동을 막아야합니다.
rjmunro

1
브라우저 공급 업체는 자신의 관심사를 찾고있는 것 같습니다. 저장된 비밀번호 = 사용자 잠금. 그리고 자동 완성 켜기 / 끄기가 너무 간단했습니다. 복잡한 의미의 힌트 ( html.spec.whatwg.org/multipage/… )가 브라우저가 사이트에서 각각 중요한 의미 데이터를 수집 할 수있게하는 이유는 무엇입니까? 사용자 방문?
aro_tech

내가 해결하려는 특정 유스 케이스는 이것입니다. 이미 로그인되어 있지만 이제는 더 민감한 것에 액세스하려고합니다. 연기가 나고 나쁜 사람이 의자에 앉을 가능성에 대비하여 다시 인증하는 대화 상자를 표시하고 싶습니다. 자동 완성을 물리 치기 위해 여러 가지 기술을 시도했지만 아무것도 작동하지 않습니다. 지금은 아마도 적어도 오래된 'password = window.prompt ( "비밀번호를 다시 입력하십시오")'와 세션의 사용자 이름을 사용하고 인증하려고합니다.
David

31

세 가지 옵션 : 첫 번째 :

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

둘째:

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

셋째 (자바 스크립트 코드) :

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

2
첫 번째 옵션과 두 번째 옵션은 브라우저가이를 처리하는 방법에 따라 다르므로 하나의 옵션이어야합니다.
rybo111

시도 $ formElement.attr ( 'autocomplete', 'off'); 작동하지 않습니다.
벤 싱클레어

22

관련되거나 실제로는 완전히 반대되는 메모에서-

"앞서 언급 한 양식의 사용자이고 자동 완성 기능을 다시 사용하려면이 책갈피 페이지 에서 '암호 기억'책갈피를 사용 하십시오 . 페이지의autocomplete="off" 모든 형식에서 모든 속성 이 제거 됩니다. 계속해서 싸우십시오! "


20

우리는 실제로 한 사이트에 sasb 의 아이디어를 사용 했습니다 . 의사 사무실을 운영하는 의료 소프트웨어 웹 앱이었습니다. 그러나 많은 고객들이 반 공공 터미널을 포함하여 많은 다른 워크 스테이션을 사용하는 외과 의사였습니다. 따라서 자동 저장된 암호의 의미를 이해하지 못하거나주의를 기울이지 않는 의사가 우연히 자신의 로그인 정보에 쉽게 액세스 할 수 없도록하려고했습니다. 물론 이것은 IE8, FF3.1 등에서 개인용 브라우징을 시작하기 이전의 아이디어였습니다. 그럼에도 불구하고 많은 의사들은 IT가 변경되지 않는 병원에서 구식 브라우저를 사용해야합니다.

따라서 로그인 페이지에서 해당 게시물에 대해서만 작동하는 임의의 필드 이름을 생성했습니다. 그렇습니다. 편리하지는 않지만 공용 터미널에 로그인 정보를 저장하지 않는 것에 대해 사용자를 때리고 있습니다.


20

이 대화에서 어떤 해결책도 나를 위해 일하지 않았습니다.

마지막으로 Javascript 가 필요 없는 최신 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>

이것은 내가 찾던 것이 었습니다!
Marco

20

그냥 설정하십시오 autocomplete="off". 이 작업을 수행해야하는 매우 좋은 이유가 있습니다. 자체 자동 완성 기능을 제공하려고합니다.


20

나는 끝없는 솔루션을 시도한 후 이것을 발견했습니다.

autocomplete="off"단순히 사용 하는 대신autocomplete="false"

그렇게 간단하며 Chrome에서도 매력처럼 작동합니다!


크롬에서 말했듯이 off 값이 작동하지 않습니다. "거짓"
이어야합니다

Chrome 44.0.2403.130에서 작동합니다.
GuiGS

1
이것을 시도 : $ formElement.attr ( 'autocomplete', 'false'); 죄송합니다. 작동하지 않습니다.
벤 싱클레어

20

이것은 나를 위해 작동합니다.

<input name="pass" type="password" autocomplete="new-password" />

텍스트, 선택 등의 다른 컨트롤에서도이 전략을 사용할 수 있습니다


이것은 최신 답변이어야합니다. 최신 크롬에서 나를 위해 작동하는 유일한 답변
Nick Chan Abdullah

19

autocomplete=offHTML 5에서 지원되는 것 같습니다 .

왜 당신이 이것을하고 싶은지 스스로에게 물어보십시오-어떤 상황에서는 의미가있을 수 있지만 그렇게하기 위해 그렇게하지는 마십시오.

OS X (아래 Soren에서 언급)의 보안 문제조차도 사용자에게 덜 편리합니다. 사람들이 자신의 암호를 원격으로 도난 당할 염려가있는 경우 앱을 사용하더라도 키 스트로크 로거가 암호를 입력 할 수 있습니다autcomplete=off .

브라우저를 사용하기로 선택한 사용자는 내 정보를 (대부분의) 기억합니다. 귀하의 사이트가 내 정보를 기억하지 않으면 성가신 것으로 생각됩니다.


17

이외에

autocomplete="off"

사용하다

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');" >

도움이 되었기를 바랍니다.


1
IE11에서는 onfocus가 readonly 특성을 제거한 후에도 텍스트 상자에 입력 할 수 없습니다. 그러나 텍스트 상자를 두 번 클릭하면 입력 할 수 있습니다.
mcallahan

IE11과 동일한 문제가 발생했습니다 (두 번째 초점까지 입력 할 수 없음). 흐림 효과를 추가 한 다음 초점을 다시 맞추십시오. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
palmsey

@ 앤드류 물론입니다. 이이 문제를 압도 할 수있는 핵심 원칙이며 또한 전체 코드 예제를 포함 업데이 트를 추가;)
무라트하기 Yıldız

또한 추가했습니다onfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr

16

최고의 솔루션 :

자동 완성 사용자 이름 (또는 이메일) 및 비밀번호 방지 :

<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에서 작업을 계속 <input>, autocomplete="off"일을하지 않는,하지만 당신은 변경할 수 off와 같은 임의의 문자열 nope.

다음에서 작동합니다.

  • 크롬 : 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 및 64

  • Firefox : 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 및 58


2
나는 이것이 예비 테스트에서 작동한다는 것을 알았습니다. "off"가 작동하지 않는 것이 이상합니다.
Craig Jacobs

Android의 Chrome에서는 작동하지 않습니다. autocomplete속성의 문자열 값을 설정하려고 시도했지만 여전히 입력 아래에 이전 항목을 자동 완성 제안으로 표시합니다.
tebs1200

어느 쪽? 비밀번호 필드 또는 텍스트 필드?
Cava

@Cava 응답이 지연되어 죄송합니다. 텍스트 필드 어떤 값을 설정했는지는 중요하지 않지만 autocomplete이전에 입력 한 값을 기반으로 제안 드롭 다운이 계속 표시됩니다. 데스크톱에서는 문제가 없지만 Android 크롬에서는 문제가 없습니다.
tebs1200

14

게임에 조금 늦었지만 ...이 문제에 부딪 치고 몇 가지 실패를 시도했지만 MDN 에서 찾은 것이 좋습니다.

경우에 따라 autocomplete 속성이 off로 설정되어 있어도 브라우저는 자동 완성 값을 계속 제안합니다. 이 예기치 않은 동작은 개발자에게 매우 어려울 수 있습니다. 실제로 완료를 강제하지 않는 트릭은 다음과 같이 속성에 임의의 문자열을 할당하는 것입니다.

autocomplete="nope"

13

추가

autocomplete="off"

양식 태그를 사용하면 브라우저 자동 완성 (이전에 해당 필드에 입력 한 내용)이 모두 비활성화됩니다 input 특정 양식 내의 입력란에서 됩니다.

에 테스트 :

  • Firefox 3.5, 4 베타
  • 인터넷 익스플로러 8
  • 크롬

13

추가해도 autocomplete="off"잘리지 않습니다.

입력 유형 속성을로 변경하십시오 type="search".
Google은 검색 유형의 입력에 자동 완성을 적용하지 않습니다.


4
해킹입니다. 이 필드는 검색 필드가 아닙니다. 앞으로 이로 인해 문제가 발생할 수 있습니다.
Roel

12

필드에 비표준 이름과 ID를 사용하십시오. "name"대신 "name_"이 있습니다. 그러면 브라우저는이를 이름 필드로 간주하지 않습니다. 그것에 대한 가장 좋은 부분은 모든 필드가 아닌 일부 필드 에이 작업을 수행 할 수 있으며 모든 필드가 아닌 일부 필드를 자동 완성한다는 것입니다.


다른 사이트에서 "name_"을 사용하여 동일한 목표를 달성하면 문제는 다시 정사각형으로 돌아 간다는 것입니다.
ConroyP

3
"mysite_name"으로 만드십시오. 다른 사람이 그것을 사용한다면, 나는 그들에게 질문을 할 것입니다 ...
Steve Perks

이 자동
채우기

12

잘못된 XHTML을 피하기 위해 javascript를 사용하여이 속성을 설정할 수 있습니다. jQuery를 사용한 예 :

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

문제는 자바 스크립트가없는 사용자는 자동 완성 기능을 사용할 수 있다는 것입니다.


38
이것은 유효하지 않은 xhtml을 피하지 않으며, 유효하다고 선언 한 후에 유효하지 않은 비트를 동적으로 추가합니다!
Andiih

@Andiih : xhtml에서 자동 완성 기능을 만드는 방법이 있습니까?
cherouvim

1
작업 (또는 목표 인 작동을 멈춤) : 위와 같이 그렇습니다. 그러나 유효합니다.
Andiih

11

autocomplete="off"작동하지 않으면 다음을 시도하십시오 .

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

11

보고 된 후에도 이것이 여전히 문제라고 믿을 수 없습니다. 위의 솔루션은 사파리가 요소가 표시되지 않거나 화면에 표시되지 않은시기를 알고있는 것처럼 보이지 않았지만 다음은 저에게 효과적이었습니다.

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

누군가에게 도움이 되길 바랍니다!


1
그렇다면 실제 사용자 이름과 비밀번호 필드보다 먼저 이것을 넣었습니까? 브라우저는 실제 브라우저가 아니라 그 브라우저를 채웠습니다
Andrew

11

여기 있습니다 :

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


1
비밀번호가 눈에 띄지 않도록 스타일 텍스트 상자를 사용하는 것이 좋습니다.
앤드류

1
정말 고마워, 이것은 작업 +1을했고, 솔루션에 대한 나의 변형은 한 줄로 작성하는 것이 었습니다 : <input oninput = "this.type = 'password'"id = "inputpassword"type = "text">
Hasnaa Ibraheem 2019

@HasnaaIbraheem 덕분에 (: 때때로 더 읽기 좋습니다.
STAV Bodik

11

이것은 브라우저가 지금 무시하는 보안 문제입니다. 브라우저는 개발자가 정보가 민감하고 저장되어서는 안된다고 생각하더라도 입력 이름을 사용하여 컨텐츠를 식별하고 저장합니다. 두 요청간에 입력 이름을 다르게하면 문제가 해결됩니다 (그러나 여전히 브라우저 캐시에 저장되며 브라우저 캐시도 증가합니다). 브라우저 설정에서 옵션을 활성화 또는 비활성화하도록 사용자에게 요청하는 것은 좋은 해결책이 아닙니다. 백엔드에서 문제를 해결할 수 있습니다.

여기 내 수정이 있습니다. 내 프레임 워크에서 구현 한 접근 방식입니다. 모든 자동 완성 요소는 다음과 같이 숨겨진 입력으로 생성됩니다.

<? $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']);

브라우저는 이전 요청이나 이전 사용자의 정보를 제안 할 수 없습니다.

브라우저 업데이트가 자동 완성을 무시하고 싶더라도 모든 것이 매력처럼 작동합니다. 그게 문제를 해결하는 가장 좋은 방법이었습니다.


10

여기에 언급 된 해킹 중 어느 것도 Chrome에서 효과가 없었습니다. 여기에 문제에 대한 토론이 있습니다 : 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>

1
이 기술을 사용하면 FireFox는 실제로 해당 숨겨진 필드를 자동으로 채우며 양식을 제출할 때 포함됩니다. 암호가 잠재적으로 보안되지 않은 연결을 통해 전송되므로 이는 나쁠 것입니다. 다행히도 추가 maxlength="0"하면 파이어 폭스가 현장을 자동으로 채우지 못하게됩니다.
Mikal Schacht Jensen

9

입력에 사용할 수 있습니다.

예를 들어;

<input type=text name="test" autocomplete="off" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.