SSL 없이는 안 됨
암호가 일반 텍스트로 네트워크를 통해 전송되는 경우 안전하지 않습니다. 암호가 네트워크를 통해 일반 텍스트로 전송되는 경우 서버 측의 암호 해시도 안전하지 않습니다.
HTML <input type="password"/>
태그는 내용을 일반 텍스트로 보내므로 웹 사이트에서 SSL을 사용하여 비밀번호를 전송하지 않으면 서버에 비밀번호를 저장하는 방법에 관계없이 문제가됩니다.
(비밀번호를 요청하는 대화 상자가 브라우저에 표시되는 HTTP 인증은 서버와 브라우저의 공통 인증 메커니즘에 따라 일반 텍스트 일 수도 있고 그렇지 않을 수도 있습니다. 따라서이를 사용하지 않고이를 피할 수 있습니다. SSL)
사이트 관리자가 의심되는 경우
이제 HTTPS를 사용하여 웹 사이트를 수행한다고 가정하면 사이트 관리자 (일반 텍스트 암호를 읽을 수있는 사용자) 및 시스템에 액세스 할 수있는 다른 사용자가 올바르게 작동하도록한다면이 정보가 안전 할 수 있습니다. 이제는 그들이 관리하고 있기 때문에 그들이 당신의 웹 사이트에서 원하는 것을 할 수 있다는 것이 명백 할 것입니다, 그러나 그들이 암호를 읽을 수 있다면, 다른 사람들의 사이트에서 도난당한 로그인 / 암호 쌍을 사용할 수도 있습니다.
관리자로부터 암호를 안전하게 유지하는 방법
비밀번호를 저장하고 확인하는 한 가지 안전한 방법은 다음과 같습니다.
def change_password user, new_password
salt = random(65536).to_s(16) #will be 4 characters long
password_hash = salt + hash(salt + new_password)
store(user,password_hash)
end
def does_password_match? user, entered_password
correct_password_hash = retrieve(user)
salt = correct_password_hash[0...4]
entered_password_hash = salt + hash(salt + entered_password)
return correct_password_hash == entered_password_hash
end
해시 함수의 경우 강하고 강력한 레인보우 테이블이없는 것을 사용하십시오. 무지개 테이블 주위에서 필요한 경우 소금의 길이를 변경할 수 있습니다.
현재 환경, 네트워크 대기 시간의 변동성 및 사용자 이름을 공개적으로 알려야 hash('0000'+entered_password)
하는지 여부에 따라 사용자가 존재하지 않는 경우 다른 코드 경로를 계산 하여 공격자가 암호가 잘못되었다고 판단하는 데 걸리는 시간에 따라 유효한 사용자 이름 결정