2011-03-22 5 views
2

해시 + 임의의 소금을받는 문자열을 어떻게 sanitize 할 수 있습니까?비밀번호를 적절하게 위조하는 방법은 무엇입니까?

공백을 제거하고 길이를 확인하고 mysqli_real_escape_string을 사용할 수 있지만 충분합니까? filter_var는 정말 유용하지만이 경우에는 도움이되지 않습니다. 맞습니까?

+1

정확하게 문자열을 준비하기 위해 살균하십시오. 이 경우 – Jon

+0

해시가 데이터베이스에 있는지 확인하십시오. –

+4

죄송합니다. 가져 오지 못합니다. 입력을 해쉬하고 그 결과가 데이터베이스에 있는지 확인하십시오 ... 위생 처리는 무엇입니까? – deceze

답변

3

변수를 SQL 쿼리에 넣으려면 mysqli_read_escape_string을 호출하거나 prepared statements을 호출해야합니다.

에는해야 할 다른 위생 처리가 없습니다. 그러나 값이 자유형 사용자 입력 (예 : 드롭 다운 메뉴 대신 텍스트 상자)에서 나올 경우에는 공백을 잘라내어 사용자에게 우의로 소문자로 표시하여 실수로 인한 실수를 바로 잡을 수도 있습니다. . 정말 응용 프로그램에 따라 다릅니다.

+4

암호를 자르거나 줄이면 암호를 수정해서는 안됩니다. 잠재적 인 공격자 만이 도움을줍니다. – deceze

+1

@deceze : 제목에 암호가 표시 될 수 있지만 질문에 해시 + 소금이 표시됩니다. 소금을 줄이면 소금이 줄어들지 만 일반적으로 생각은 괜찮다는 것에 동의 할 것입니다. 그리고 나는 "신청에 따라", 즉 사람들의 이름으로하지 말고 신용 카드 번호로 말합니다. – Jon

+0

정규 표현식을 사용하여 홀수 문자를 입력 할 수 없습니까? –

0

먼저 암호가 주어진 유효성 검사 규칙과 일치하는지 확인합니다. 이것을 위해 정규식을 사용할 수 있습니다. 패스워드는 a-z, 0-9, 어쩌면 구두점과 일치 할 수 있으며 특정 길이 (예 : 6-12 자) 이내 여야합니다. preg_match()을 사용하여 문자열의 내용과 길이를 확인하십시오. preg_match('/^[a-z0-9]{6,12}$/i',$pass)과 같은 것이 시작일 수 있습니다.

다음으로 암호를 해시 할 수 있습니다. 그렇게하려면 crypt() 함수를 사용할 수 있습니다. 이렇게하면 사용자가 나중에 인증하려고 시도 할 때 비교할 수있는 단방향 암호화 문자열이 생성됩니다.

마지막으로 암호를 저장하려면 mysqli_real_escape_string()을 사용하여 SQL 삽입 또는 업데이트 문에서 사용할 준비를해야합니다.

+1

강력한 암호에는 소문자와 대문자는 물론 숫자와 함께! @ # $ %^&*(); : <>과 같은 특수 문자를 선택하는 것이 좋습니다. 에서 고르다. 또한 적어도 8 자 이상을 사용하는 것이 가장 좋습니다. –

+0

암호가 아니라 해시를 저장해야합니다. 그 점을 분명히 할 때까지 -1. –

+0

@SyntaxError 강력한 암호는 암호가 아니며 [passphrase]입니다 (https://en.wikipedia.org/wiki/Passphrase). –

1

신뢰할 수없는 출처에서 해시 (사실 무작위 데이터) + 소금 (실제로 임의의 데이터)을 수신하고 있는데 '위생 처리'를 원하십니까? 아마도 적용 가능한 온전한 정의 (base64 인코딩과 같은 데이터 형식, 최대/예상 길이)가있을 수 있지만 어딘가에 기능상의 보안 실수가 있다고 생각됩니다.

특히 신뢰할 수있는 환경에서 비밀번호를 수락하고 변환하는 대신 신뢰할 수없는 출처의 해시 + 소금을 허용하는 이유는 무엇입니까? 신뢰할 수없는 출처의 해시 + 소금을 수락하면 일반 텍스트로 변환됩니다 (원래 암호를 해싱하고 소금을 칠해 얻은 이점을 잃게됩니다).

관련 문제