특정 사이트가 비밀번호 공백을 방지하는 이유는 무엇입니까?


16

새로운 웹 사이트에서는 일반적이지 않지만 계정을 필요로하는 많은 웹 사이트 (예 : 청구서 지불 등)에 공백이있는 암호를 만들 수 없습니다. 이로 인해 기억하기가어려워 지며 암호 공간, 암호화 또는 (허용되지 않은) 공간에 대한 데이터베이스 또는 프로그래밍 제한이 없습니다. 그러면 스페이스 바가 사이트에 가입 할 때 일반적으로 차별되는 이유는 무엇입니까?


SSO에 비어 있지 않은 암호가 필요하다고 가정하면 일부 사이트에서 Single Sign On을 사용할 수 있습니다 (확실하지는 않음)!
NoChance

1
실제로 저를 두렵게하는 것은 사이트가 작은 따옴표를 구체적으로 허용하지 않을 때입니다. 무엇 가능한 이유 당신은 가능하게하는 것 이외 가질 수있다 "insert into USERS (..., password) values (..., '" + $POST['password'] + "');" : -S
기독교 Klauser

프로그래머가 아닌 보안에 갔다. 이것은 아마도 이미 존재합니다.
Dan McGrath

답변:


20

웹 사이트의 암호와 관련하여 엄청난 양의 어리 석음 이 있습니다.

  • 일부는 순수한 기술적 이유가 있습니다 (유효한지 여부, 다른 질문이지만 거의 모든 것이 아닙니다).

비밀번호는 4 자 길이 여야하며 숫자 만 있어야합니다.

(암호를 0001 .. 9999 범위로 제한하면 데이터베이스에 간단히 숫자로 일반 텍스트로 저장할 수 있습니다)

  • 다른 사람들은 암호를 더 안전하게 만들 것이라는 잘못된 생각 으로 설명됩니다 .

비밀번호는 대문자로 시작하고 숫자로 끝나야합니다.

(개발자 또는 관리자 이렇게함으로써, 가정 실제로 안전한 암호를 선택하는 사용자를 강제하는 동안 암호는 적어도 하나의 대문자, 소문자하고있다. 6 자 분을 포함하고 있어야합니다 "등의 규칙 숫자 "는 마술처럼 실패합니다)

  • 기타, 마지막으로 암호가 저장되어 있다는 사실에 의해 설명되는 일반 텍스트를 하고, 거기에 약간의 모호성 후 저장 처리 또는 검색하는 방법에 대한, 그리고 단위 테스트 그들에게 시간이 없습니다.

비밀번호에 잘못된 문자가 포함되어 있습니다 é.

또는,

비밀번호 y$₯46¥*A'xD<7&฿=ᴙcN&sF5_Ở!d에 유효하지 않은 문자가 포함되어 있습니다. 라틴 알파벳과 숫자 만 사용하십시오.

또는,

비밀번호는 공백 문자를 포함 할 수 없습니다.

세 가지 경우 모두 개발자는 이와 같은 비밀번호가 올바르게 저장되도록 보장했습니다.

  • 첫 번째 경우, 전송시 어떻게 é변환 %C3%A9됩니까? 또는 데이터베이스가 é잘못 저장되면 어떻게 됩니까?

  • 두 번째 경우, PHP (왜 PHP?)가 유니 코드를 처리 할 수없고 이와 같은 암호를 수신 할 때 끔찍한 일이 발생하면 어떻게됩니까? <캐릭터가 문제를 일으키는 경우 어떻게해야 합니까? &문자가 URL에서 구분 기호로 해석되는 경우 (어떤 이유로 비밀번호가 POST 대신 GET을 통해 전송된다고 가정 할 경우)? 만약 '데이터베이스에 의해 해석 된다면 , SQL 인젝션이 무엇인지, 어떻게 피할 수 있을지 모릅니다. 아니면 어떻게 '변형 \'됩니까?

  • 세 번째 경우, PHP (다시?)가 경우에 따라 공백을 제거 하고 다른 경우에는 공백 을 제거하지 않으면 어떻게됩니까? 사용자가 공백을 하나만보고 사용자가 3 개의 연속 공백을 설정 하여 관리자 (놀랍게도 일반 텍스트로 사용자 암호에 액세스 할 수있는)가 손실 되면 어떻게됩니까?

세 가지 경우 모두 모호성은 테스트 , 특히 단위 테스트를 통해 쉽게 해결됩니다 . 그러나 엄청난 양의 프로젝트에는 테스트가 전혀 없으며 테스트 할 시간이 없습니다 (그러나 나중에 디버그 할 시간은 충분합니다).

이는 개발자가 공백 또는 유니 코드 문자 를 허용 하거나 ASCII 48..57 ∪ 65..90 ∪ 97..122 (숫자, 소문자, 대문자) 이외의 문자 를 허용 할 때 발생할 수있는 결과에 대해 생각하는지 여부를 의미합니다. , 시험이 가능하지 않을 때 가장 쉬운 방법은, 단지 그들을 금지하는 것입니다 .

제 생각에는 이것이 공백을 금지하는 유일한 이유입니다. Yannis Rizos는 UX와 관련된 또 다른 이유를 제시했습니다. 이론상 그럴듯한 이유는 아니지만 실제로 실제로는 작동하지 않습니다. 실제로 UX에 관심이있는 사람들이 만든 웹 사이트는 어리석은 암호 규칙을 수정하지 않습니다. 대신 공백이 실제로 금지 된 웹 사이트는 대부분 UX에 대해 들어 본 적이없는 사람들이 수행합니다 . 이것은 모든 문자가 UX 관점에서 실제로 성가 시므로 유용한 문자를 포함하여 모든 암호 관련 제한을 최소 문자 수로 사용하지 않기 때문에 특히 그렇습니다.


공백을 제거 할 때 기억하기 쉬운 긴 암호를 많이 없애고 (길이는 크래킹에 비해 복잡성보다 더 효과적인 것으로 입증되었습니다) 사용자가 긴 시리즈보다 기억하기 어려운 암호를 채택하도록 권장합니다. 공간.
Lèse majesté

1
나는 읽은 내용의 대부분에 동의하지만 "테스트가 불가능할 때 가장 쉬운 방법"이라는 문장을 소화하기가 정말 어렵다. 테스트가 불가능합니까 ??? 어리 석음이 효율적으로 극대화되는 프로젝트에 동의하는 사람은 누구나 가능합니다.
토마스

@ 토마스 : 이것은 이론과 지식의 차이이며 일반적인 무지와 시간 제약으로 인해 많은 사람들이 시간 테스트를 낭비하고 싶지 않으며 적어도 두 번 이상의 디버깅에 소비한다는 것을 무시합니다.
Arseni Mourzenko

사용자가 정의 할 것을 요구하는 것이 합리적 일 수있다 같은 암호가 자동 전화 접속 같은 것을 위해 필요할 수 있습니다 경우에만 숫자로 구성 비밀번호를하지만, 이러한 암호는 컴퓨터 기반의 액세스를위한 주요 인증 자격 증명해서는 안됩니다.
supercat

3

답은 역사입니다

많은 것들의 기초는 스토리지가 디스크 나 메모리에서 효과적으로 비워지지 않았을 때,이 모든 것들을 관리 할 수있는 능력이 현재보다 다소 낮고 자동화 된 시스템의 능력 과 동등 하지 않은 시점에서 비롯된 것 같습니다. 같은 균열을 시도하는 것도 다소 적었다.

우리가 지금 알고있는 것과 지금 할 수있는 것에 기초하여 암호에 대한 많은 불만이 있지만, 단순한 사실은 종종 우리가 종종 레거시 사고와 레거시 시스템의 조합을 다루고 있다는 것입니다.

이제 새로운 시스템에 제한이 있습니까? 나는 더 적은 이유를 지금 희망하지 않을 것입니다


이전에는 없었던 암호에 공백 이있는 기술적 인 제한 이 있었다고 말하고 있습니까? 스토리지는 정확히 어떤 부분을 담당 했습니까?
Ian Hunter

1
나는 기술적 인 한계와 덜 복잡한 외부 제약 (그리고 아마도 "trim"의 사용)이 사람들이 적절하고 허용 가능한 것에 대해 다르게 생각한다는 것을 의미한다고 제안합니다. 암호를 재설정하기가 더 어려워 기억하기 쉬운 암호를 만들기 위해 암호를 제한 할 수 있습니다. 단순히 읽을 수있는 장소에 도착하는 것은 (당시) 상대적으로 매우 어려우며 (어쨌든 외부 세계에서는 시스템에 액세스 할 수 없기 때문에) 암호화하지 않을 수 있습니다. 다른 시대, 완전히 다른 사고 과정에서 유산을 남겼습니다
Murph

2

IMHO, 현대 해싱 및 / 또는 솔트를 사용하여 암호를 공백으로 만들지 않는 암호를 저장하는 사이트 / 앱은 어리 석습니다. 그래서 공백이 허용하지 않는 -하지만 (이 곳에 대해 읽기) 일부 레거시 시스템은 여전히 일반 텍스트로 암호를 주변에 통과 할 수 있습니다 의미합니다. 또한 일부 앱은 수신 한 모든 문자열 입력을 "스트립"할 수 있습니다. 따라서 암호로 시작하거나 공백으로 끝나는 암호는 좋지 않을 것입니다 (물론 너무 많이 고안되었지만 거의 모든 사람이 자신의 사이트를 만들면 발생할 수없는 것을 상상할 수 있습니다). 암호에 공백을 허용하는 데 "나쁜"것은 없습니다. 지적했듯이 DB는 해시 또는 일반 텍스트 버전을 허용하지 않습니다.

실제로 대부분의 Windows 친구는 암호에 공백을 사용할 수 있다는 것을 알지 못합니다. 따라서 Tim Medora의 답변에 따라 사이트 소유자는 lamahs (용서) 또는 기회를 갖기를 원하지 않습니다. 공간이 제공 할 수있는 장점을 오해하고 /하거나 무지하다.


1
암호를 사용하여 선행 / 후행 공백을 제거하는 것이 문제를 일으키는 경향이 있기 때문에 암호를 사용하지 않으려는 이유는 없습니다. 설정 및 테스트에서 문제가 발생하지 않습니다.
Loren Pechtel

"문제"는 정확히 무엇입니까? 나는 공백이 허용되어야한다는 대답에서 강조하고 있습니다. "설정과 테스트에서 모두 제거 될 것"-요점은 무엇입니까? 그런 다음 "1 4m 1337"및 "1 4am 1337"은 모두 같은 값으로 해시됩니다 (실제로는 이론적으로 무한한 가능성이 있습니다).
yati sagade

What's the point then?사소한 점은 사용자가 의도 한대로 암호의 엔트로피가 적다는 것입니다. 그리고 일부 시스템은 기본적으로 GET / POST 변수를 다듬습니다.이 동작이 (아마도) 변경되면 더 심각한 문제가 발생할 수 있습니다.
yannis

@ Yati sagade : 나는 내부 공간을 제거하는 것에 대해 이야기 하지 않습니다 . 나는 앞뒤 공백에 대해 이야기하고 있습니다. 사람들은 공백이 있다는 것을 깨닫지 못하고 로그인 실패를 일으 킵니다. 마찬가지로 모든 대문자로 된 암호가 소문자로 바뀌면 대문자 잠금이 설정되어 있지 않은 사람 일 수 있습니다.
Loren Pechtel

-1

많은 사이트에서 하이픈, 아포스트로피 또는 ASCII가 아닌 문자를 이름으로 허용하지 않는 것과 같은 이유로 수행됩니다. 비록 미국 내에서도 매우 일반적인 관행이며 단순히 허용하는 것보다 이러한 문자를 허용하지 않는 데 더 많은 작업이 필요합니다. 그들.

같은 이유 때문에 많은 사이트의 단어 필터를 사용하면 "자기", "지연"또는 "누적"과 같은 단어를 사용할 수 없습니다 (많은 일반적인 인종 비방은 완벽하게 괜찮습니다).

많은 개발자가 상식적으로 완전히 부족하거나 가능한 사용자 입력 및 시나리오를 고려할 때 최소한 매우 제한된 상상력을 가지고 있기 때문입니다. 소수의 사람들이 허위 정보로 작업하고있을 수 있습니다 (영숫자가 아닌 문자를 제외하는 것이 표준 관행이거나 해시 알고리즘 또는 저장 방법이 공백이나 특수 문자를 처리 할 수 ​​없음). 다른 사람들은 단순히 게으른 것일 수도 있습니다. 문자 집합 문제가 걱정되기 때문에 입력을 최소한의 문자 공간으로 제한하기 만합니다. 그리고 실제 위협에 대한 이해 부족으로 편집증으로 인해 지나치게 열악한 입력 검증 / 위생을하는 사람들이있을 수 있습니다.


특정 문자 인코딩을 시행하는 것 외에 화이트리스트를 사용해야하는 이유는 무엇입니까? 사용자가 선택한 암호를 약화시키면서 임의의 문자를 제한해도 아무런 이점이 없다는 사실은이 의견의 근거입니다. 필자가 제시 한 모든 예제는 디자인 선택을 신중하게 고려하지 않는 개발자의 증상입니다.
Lèse majesté
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.