웹 사이트의 암호와 관련하여 엄청난 양의 어리 석음 이 있습니다.
- 일부는 순수한 기술적 이유가 있습니다 (유효한지 여부, 다른 질문이지만 거의 모든 것이 아닙니다).
비밀번호는 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 관점에서 실제로 성가 시므로 유용한 문자를 포함하여 모든 암호 관련 제한을 최소 문자 수로 사용하지 않기 때문에 특히 그렇습니다.