귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 개발자가 지켜야 할 원칙 == 웹 서비스나 앱을 만드는 개발자는 다음 원칙을 지켜야 한다. === 입력과 전송 === * 로그인 페이지는 HTTPS를 사용한다. * 비밀번호를 URL 쿼리 문자열에 넣지 않는다. * 로그에 비밀번호를 남기지 않는다. * 오류 추적 도구에 비밀번호가 전송되지 않게 한다. * 비밀번호 입력란은 적절한 자동완성 속성을 사용한다. * 사용자가 비밀번호 관리자를 쓸 수 있게 한다. * 붙여넣기를 막지 않는다. * 필요하면 비밀번호 표시 버튼을 제공하되, 기본값은 숨김으로 둔다. === 저장 === * 평문 저장 금지 * 단순 SHA-256 저장 금지 * 계정별 고유 솔트 사용 * Argon2id, bcrypt, PBKDF2 등 검증된 비밀번호 해싱 알고리즘 사용 * 비용 인자를 주기적으로 상향 검토 * 알고리즘과 비용 인자를 저장해 향후 마이그레이션 가능하게 설계 * 비밀번호 변경 시 기존 세션 처리 정책 마련 * 관리자도 사용자 비밀번호 원문을 볼 수 없게 설계 === 인증 흐름 === * 로그인 실패 횟수에 대한 속도 제한 적용 * 단순 계정 잠금만으로 서비스 거부 공격이 발생하지 않게 설계 * 크리덴셜 스터핑 탐지 * 비정상 로그인 알림 * 새 기기 로그인 알림 * 민감 작업 시 재인증 요구 * 2차 인증 설정 지원 * 패스키 지원 검토 === 비밀번호 재설정 === 비밀번호 재설정은 로그인만큼 중요하다. 재설정 절차가 약하면 비밀번호가 아무리 강해도 소용없다. 좋은 비밀번호 재설정 정책은 다음과 같다. * 재설정 링크는 충분히 긴 무작위 토큰을 사용한다. * 재설정 토큰은 짧은 유효 기간을 가진다. * 재설정 토큰은 한 번만 사용할 수 있어야 한다. * 재설정 토큰도 안전하게 저장한다. * 비밀번호 변경 후 사용자에게 알림을 보낸다. * 이메일 계정 탈취를 고려해 민감 계정은 추가 검증을 요구한다. * 보안 질문만으로 비밀번호를 재설정하지 않는다. === 오류 메시지 === 로그인 실패 메시지는 공격자에게 불필요한 정보를 주지 않아야 한다. 나쁜 예: * "존재하지 않는 아이디입니다." * "비밀번호가 틀렸습니다." * "이 이메일은 가입되어 있습니다." 좋은 예: * "아이디 또는 비밀번호가 올바르지 않습니다." * "입력한 정보로 로그인할 수 없습니다." 다만 사용성도 중요하다. 무조건 모든 정보를 숨기면 사용자가 문제를 해결하기 어렵다. 보안과 사용성 사이에서 적절한 균형이 필요하다. 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)