답변:
Firefox 30은 autocomplete="off"
암호를 무시 하고 대신 암호를 클라이언트에 저장해야하는지 묻는 메시지를 표시합니다. 2014 년 5 월 5 일 의 다음 주석에 유의하십시오 .
- 암호 관리자는 항상 암호 를 저장할 것인지 묻습니다. 비밀번호는 사용자의 허가없이 저장되지 않습니다.
- 우리는 IE와 Chrome에 이어이 변경을 구현 한 세 번째 브라우저입니다.
에 따르면 모질라 개발자 네트워크 문서, 부울 폼 요소 속성 autocomplete
방지는 이전 버전의 브라우저에 캐시되는 데이터를 형성한다.
<input type="text" name="foo" autocomplete="off" />
뿐만 아니라 autocomplete=off
양식 필드 이름을 페이지를 생성하는 코드에 의해 무작위화할 수도 있습니다 (아마도 세션 끝에 문자열을 이름 끝에 추가하여).
양식을 제출하면 서버 측에서 처리하기 전에 해당 부분을 제거 할 수 있습니다. 이렇게하면 웹 브라우저가 해당 필드에 대한 컨텍스트를 찾지 못하고 공격자가 양식 제출에 대한 필드 이름을 추측 할 수 없으므로 XSRF 공격을 방지 할 수 있습니다.
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
대부분의 주요 브라우저 및 암호 관리자 (올바로 IMHO)는 이제 무시 autocomplete=off
합니다.
왜? 많은 은행 및 기타 "높은 보안"웹 사이트가 autocomplete=off
"보안 목적으로"로그인 페이지에 추가 되었지만 자동 완성 이후 사람들이 보안 수준이 높은 사이트의 암호를 쉽게 기억하고 해독 할 수 있기 때문에 실제로 보안이 저하됩니다. 부서졌다.
오래 전에 대부분의 암호 관리자는 무시하기 시작 autocomplete=off
했으며 이제 브라우저는 사용자 이름 / 암호 입력에 대해서만 동일한 작업을 시작합니다.
불행히도 자동 완성 구현의 버그로 인해 사용자 이름 및 / 또는 암호 정보가 부적절한 양식 필드에 삽입되어 양식 유효성 검사 오류가 발생하거나 사용자가 의도적으로 비워 둔 필드에 실수로 사용자 이름을 삽입하는 경우가 있습니다.
웹 개발자는 무엇을해야합니까?
불행히도 Chrome 34는 비밀번호 필드가 표시 될 때마다 사용자 / 패스로 필드를 자동으로 채 웁니다. 이것은 사파리의 행동을 바꿀 수있는 아주 나쁜 버그입니다. 그러나 양식 맨 위에 이것을 추가하면 비밀번호 자동 완성이 사용 중지 된 것으로 보입니다.
<input type="text" style="display:none">
<input type="password" style="display:none">
아직 IE 또는 Firefox를 철저히 조사하지는 않았지만 다른 사람들이 의견에 정보가 있으면 답변을 업데이트하게되어 기쁩니다.
type='password'
한 페이지에 두 개의 필드를 만들면 브라우저의 "비밀번호 저장"자동 완성이 무시됩니다. 이는 로그인 양식이 비밀번호를 한 번만 요청할 때 등록 양식이 비밀번호를 두 번 요청하는 경향이 있기 때문에 많은 의미가 있습니다.
때로는 심지어 자동 완성 해제 = 것입니다 채우기 위해 방지 할 사용자 또는 별칭 필드 잘못된 필드에 자격 증명 있지만.
이 해결 방법은 브라우저 동작에 대한 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의 암호 필드 앞에 나타나는 가장 가까운 텍스트 입력 필드를 자동으로 채 웁니다 (관찰 때문에 추측). 브라우저가 마지막 인스턴스이므로 제어 할 수 없으므로
위의 읽기 전용 수정은 저에게 효과적이었습니다.
readonly
이 제거 되는 즉시 필드를 선택하면 자동 완성이 반환됩니다.
<form name="form1" id="form1" method="post"
autocomplete="off" action="http://www.example.com/form.cgi">
이것은 Internet Explorer 및 Mozilla FireFox에서 작동하지만 단점은 XHTML 표준이 아니라는 것입니다.
input type="password"
. 다른 브라우저는이 기능을 제거하지 않기를 바랍니다.
autocomplete="off"
온 것은 form
크롬 위해 일한 유일한 것입니다.
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
변경 사항이 적용 되는지 확인하십시오. 브라우저가 페이지를 캐시에 저장하는 경우가 많습니다.
다른 사람들이 말했듯이 대답은 autocomplete="off"
그러나 일부 사례에 대한 답변과 중복 된 질문으로 인해 끄지 않는 것이 좋습니다. 왜냐하면 특정 경우에 이것을 사용하는 것이 좋은 아이디어 인지 말할 가치가 있다고 생각합니다 .
신용 카드 번호를 저장하는 브라우저를 중지하는 것은 사용자에게 맡겨서는 안됩니다. 너무 많은 사용자는 그것이 문제라는 것을 깨닫지 못할 것입니다.
신용 카드 보안 코드 필드를 끄는 것이 특히 중요합니다. 이 페이지 는 다음과 같이 말합니다.
"보안 코드를 저장하지 마십시오.이 값은 보안 신용 카드를 제공하는 유일한 방법은 실제 신용 카드에서 코드를 읽어야한다는 가정에 따라 달라집니다.이를 제공하는 사람이 실제로 카드를 보유하고 있음을 증명합니다."
문제는 공용 컴퓨터 (사이버 카페, 라이브러리 등) 인 경우 다른 사용자가 카드 세부 정보를 훔치기가 쉽다는 것입니다. 심지어 자신의 컴퓨터에서도 악의적 인 웹 사이트가 자동 완성 데이터를 훔칠 수 있습니다 .
임의의 문자를 사용하여 Chrome으로 끝없는 싸움을 해결했습니다. 임의 문자열로 항상 자동 완성을 렌더링하면 아무것도 기억되지 않습니다.
<input name="name" type="text" autocomplete="rutjfkde">
그것이 다른 사람들에게 도움이되기를 바랍니다.
autocompleteoff
원하는 입력 필드에 클래스를 추가 할 수 있습니다 .
자동 완성 기능을 사용 중지하지 않으려면 답변과 다르게 구걸해야합니다.
우선 로그인 양식 필드에서 자동 완성 기능이 명시 적으로 비활성화되지 않는 것은 PCI-DSS 실패라는 것입니다. 또한 사용자의 로컬 컴퓨터가 손상되면 자동 완성 데이터는 일반 컴퓨터에 저장되어 있기 때문에 사소한 것으로 자동 완성 될 수 있습니다.
사용성에 대한 논쟁이 있지만, 어떤 양식 필드가 자동 완성 기능을 비활성화해야하는지, 그렇지 않아야하는지에 대해서는 균형이 잘 잡혀 있습니다.
우리는 실제로 한 사이트에 sasb 의 아이디어를 사용 했습니다 . 의사 사무실을 운영하는 의료 소프트웨어 웹 앱이었습니다. 그러나 많은 고객들이 반 공공 터미널을 포함하여 많은 다른 워크 스테이션을 사용하는 외과 의사였습니다. 따라서 자동 저장된 암호의 의미를 이해하지 못하거나주의를 기울이지 않는 의사가 우연히 자신의 로그인 정보에 쉽게 액세스 할 수 없도록하려고했습니다. 물론 이것은 IE8, FF3.1 등에서 개인용 브라우징을 시작하기 이전의 아이디어였습니다. 그럼에도 불구하고 많은 의사들은 IT가 변경되지 않는 병원에서 구식 브라우저를 사용해야합니다.
따라서 로그인 페이지에서 해당 게시물에 대해서만 작동하는 임의의 필드 이름을 생성했습니다. 그렇습니다. 편리하지는 않지만 공용 터미널에 로그인 정보를 저장하지 않는 것에 대해 사용자를 때리고 있습니다.
이 대화에서 어떤 해결책도 나를 위해 일하지 않았습니다.
마지막으로 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>
이것은 나를 위해 작동합니다.
<input name="pass" type="password" autocomplete="new-password" />
텍스트, 선택 등의 다른 컨트롤에서도이 전략을 사용할 수 있습니다
autocomplete=off
HTML 5에서 지원되는 것 같습니다 .
왜 당신이 이것을하고 싶은지 스스로에게 물어보십시오-어떤 상황에서는 의미가있을 수 있지만 그렇게하기 위해 그렇게하지는 마십시오.
OS X (아래 Soren에서 언급)의 보안 문제조차도 사용자에게 덜 편리합니다. 사람들이 자신의 암호를 원격으로 도난 당할 염려가있는 경우 앱을 사용하더라도 키 스트로크 로거가 암호를 입력 할 수 있습니다autcomplete=off
.
브라우저를 사용하기로 선택한 사용자는 내 정보를 (대부분의) 기억합니다. 귀하의 사이트가 내 정보를 기억하지 않으면 성가신 것으로 생각됩니다.
이외에
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');" >
도움이 되었기를 바랍니다.
$(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
onfocusout="this.setAttribute('readonly', 'readonly');"
최고의 솔루션 :
자동 완성 사용자 이름 (또는 이메일) 및 비밀번호 방지 :
<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
autocomplete
속성의 문자열 값을 설정하려고 시도했지만 여전히 입력 아래에 이전 항목을 자동 완성 제안으로 표시합니다.
autocomplete
이전에 입력 한 값을 기반으로 제안 드롭 다운이 계속 표시됩니다. 데스크톱에서는 문제가 없지만 Android 크롬에서는 문제가 없습니다.
추가해도 autocomplete="off"
잘리지 않습니다.
입력 유형 속성을로 변경하십시오 type="search"
.
Google은 검색 유형의 입력에 자동 완성을 적용하지 않습니다.
필드에 비표준 이름과 ID를 사용하십시오. "name"대신 "name_"이 있습니다. 그러면 브라우저는이를 이름 필드로 간주하지 않습니다. 그것에 대한 가장 좋은 부분은 모든 필드가 아닌 일부 필드 에이 작업을 수행 할 수 있으며 모든 필드가 아닌 일부 필드를 자동 완성한다는 것입니다.
잘못된 XHTML을 피하기 위해 javascript를 사용하여이 속성을 설정할 수 있습니다. jQuery를 사용한 예 :
<input type="text" class="noAutoComplete" ... />
$(function() {
$('.noAutoComplete').attr('autocomplete', 'off');
});
문제는 자바 스크립트가없는 사용자는 자동 완성 기능을 사용할 수 있다는 것입니다.
보고 된 후에도 이것이 여전히 문제라고 믿을 수 없습니다. 위의 솔루션은 사파리가 요소가 표시되지 않거나 화면에 표시되지 않은시기를 알고있는 것처럼 보이지 않았지만 다음은 저에게 효과적이었습니다.
<div style="height:0px; overflow:hidden; ">
Username <input type="text" name="fake_safari_username" >
Password <input type="password" name="fake_safari_password">
</div>
누군가에게 도움이 되길 바랍니다!
여기 있습니다 :
function turnOnPasswordStyle() {
$('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
이것은 브라우저가 지금 무시하는 보안 문제입니다. 브라우저는 개발자가 정보가 민감하고 저장되어서는 안된다고 생각하더라도 입력 이름을 사용하여 컨텐츠를 식별하고 저장합니다. 두 요청간에 입력 이름을 다르게하면 문제가 해결됩니다 (그러나 여전히 브라우저 캐시에 저장되며 브라우저 캐시도 증가합니다). 브라우저 설정에서 옵션을 활성화 또는 비활성화하도록 사용자에게 요청하는 것은 좋은 해결책이 아닙니다. 백엔드에서 문제를 해결할 수 있습니다.
여기 내 수정이 있습니다. 내 프레임 워크에서 구현 한 접근 방식입니다. 모든 자동 완성 요소는 다음과 같이 숨겨진 입력으로 생성됩니다.
<? $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']);
브라우저는 이전 요청이나 이전 사용자의 정보를 제안 할 수 없습니다.
브라우저 업데이트가 자동 완성을 무시하고 싶더라도 모든 것이 매력처럼 작동합니다. 그게 문제를 해결하는 가장 좋은 방법이었습니다.
여기에 언급 된 해킹 중 어느 것도 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>
maxlength="0"
하면 파이어 폭스가 현장을 자동으로 채우지 못하게됩니다.