문제

PHP를 사용하면 비밀번호에 사용할 수있는 유일한 문자가 ASCII 유형성, 마이너스 제어 코드 및 NULL입니다.

preg_replace ()에 플러그인 할 수있는 동정인은 무엇입니까?

편집하다:

나는 지금 "얻는"이후이 질문을 편집하는 것이 좋습니다. 제어 코드.

도움이 되었습니까?

해결책

다른 사람들이 말했듯이, 암호로 허용되는 문자 세트를 제한하지 마십시오. 으니까 당신의 키보드에는 ä, Å 또는 Ö가 없습니다. 그 글자를 사용하는 것을 가지고있는 (또는 어쨌든 입력하는 방법을 아는 사람)를 멈출 이유가 없습니다. 당신은 암호를 암호화 해시로 저장할 것입니다. 그렇다면 데이터베이스가 비밀번호에 실제 문자를 성공적으로/안전하게 저장할 수 있는지 여부는 중요하지 않습니다. 암호화 알고리즘으로 문자 만 출력합니다. (그렇지 않다면, 비밀번호를 일반 텍스트로 저장하는 것은 멀리 암호가 포함하거나 포함하지 않을 수있는 캐릭터보다 더 큰 문제 - 그렇게하지 마십시오!)

사용자에게 "다시 시도하고 이번에는 다음과 같은 문자를 사용하십시오 : a, e, i, o, u." 제안 된 방법을 진정으로 끔찍하게 만듭니다. 제가 사용하려고하면 비밀번호 fäîry (엄청나게 안전하지는 않지만 가벼운 사전 공격에 대비해야합니다), 저에게 알려지지 않은 나의 실제 비밀번호는 다음과 같습니다. fry (비밀번호가 사전에서 바로 나오고 공통적으로 사용되는 3 글자 단어라면 귀찮게하지 않을 수도 있습니다). 아야!

다른 팁

개인적으로, 나는 웹 사이트 나 서비스가 내가 특정 (일반적으로 멍청한) 한계를 따르는 암호를 사용하도록 강요 할 때 항상 매우 혼란 스러웠다는 것을 알았습니다.

너무 쉽게 추측 할 수없는 암호의 요점이 아닌가? 왜 사용자가 원하는 것보다 덜 복잡하기를 원하십니까? 비밀번호에 "ASCII 전용"을 사용해야하는 기술적 제한을 상상할 수 없습니다.

사용자가 원하는 암호를 사용하고 해시 한 다음 Base64 문자열로 저장하도록하십시오. 이것들은 ASCII 전용입니다.

여기에 간다 :

^[ -~]+$

빈 암호를 원하지 않는다고 가정합니다. 그렇지 않으면 그것은 다음과 같습니다.

^[ -~]*$

빈 것들을 허용합니다.

왜 당신이 묻는 지 잘 모르겠습니다 preg_replace - 사람들이 입력 한 암호를 조작하는 데주의를 기울일 것입니다. 인쇄 가능한 ASCII 만 수락하는 규칙을 시행하고 사용자에게 그 규칙을 위반하는지 (또는 다른 사람들이 말했듯이 규칙이 없다고 말하지만, 그 이유가 있다고 가정합니다).

일치하지 않는 캐릭터를 조용히 제거 할 생각을하고 누군가가 úéåæ의 비밀번호와 함께 제공되면 지식없이 빈 비밀번호를 저장할 것입니다.

사용자 비밀번호를 필터링하지 마십시오. 그것은 많은 요점을 물리칩니다. 나는 이것에 대해 더 많이 썼다 : http://www.evanfosmark.com/2009/06/why-do-so-many-websites-fail-with-password-restrictions/

프로가 아닌 사람들이 단점보다 더 중요하다는 것을 결정하는 것은 당신에게 달려 있지만, 비 ASCII 캐릭터를 거부 할 이유가 없다는 것에 동의하지 않습니다.

ASCII가 아닌 문자를 허용하는 경우 실제로 웹 애플리케이션의 해당 부분을 제대로 국제화하려고합니다. 많은 응용 분야에서 국제화는 나중에 생각합니다. 웹 응용 프로그램의 경우 매우 사소한 문제입니다.

문자와 바이트 사이를 갈 때 캐릭터 인코딩을 명시 적으로 제어하지 않으면 기본적으로 배포에 대한 기본값이 발생하는 모든 것에 의존합니다. 구성이 변경되면 (예 : Windows에서 Linux로 마이그레이션하거나 다른 웹 서버로 전환) 기본값은 아래에서 변경 될 가능성이 높으며 ASCII가 아닌 문자는 다른 바이트 시퀀스로 직렬화됩니다. 따라서 갑자기 암호에 사용하는 사람들의 해시는 데이터베이스의 내용과 일치하지 않으며 계정에서 잠겨 있습니다.

물론, 나는 그 캐릭터를 필터링하는 것이 완전히 용납 될 수 없다는 데 동의합니다. 비밀번호를 수락하거나 거부해야합니다.

/ [ p {cc}]/ 제어 문자를 얻기 위해 (나는 이것이 0-31을 다루고 있다고 생각합니다)

나는 Richie와 동의합니다. preg_replace 대신 preg_match를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top