tag

인증

이 태그가 달린 문서 7건

2026-09-05

비밀번호 재설정의 설계 결함: 로그인을 강화해도 계정이 탈취되는 5가지 경우와 해결책

재설정 기능은 비밀번호를 모르는 사람이 새 비밀번호를 정하게 해 주는 장치이므로, 그 자체로 하나의 인증 경로입니다. 로그인을 아무리 강화해도 재설정이 약하면 재설정의 강도가 실제 인증 강도가 됩니다. 실패의 형태는 5가지입니다. 추측 가능한 토큰, 만료되지 않는 토큰, 메일함에 남아 재사용되는 링크, 외부에서 목적지를 바꿀 수 있는 링크(Host 헤더), 계정이 있는지 드러내는 응답. 구현의 핵심은 가이드가 요구하는 것과 직접 정해야 하는 숫자를 구분하는 것입니다.

2026-09-05

요청 횟수 제한과 남용 대책: 무차별 대입과 비용 폭주를 막는 제한 설계

요청 횟수 제한이 실패하는 것은 대개 제한이 느슨해서가 아니라 질문을 잘못했기 때문입니다. 질문은 세 가지입니다. 누구를 셀 것인가(IP는 위조할 수 있고 실제 사용자끼리도 공유하므로 주체가 먼저), 무엇을 셀 것인가(요청 수만으로는 한 번에 비싼 작업을 놓친다. 비용, 크기, 레코드 수), 상한에 닿으면 어떻게 할 것인가(무딘 잠금은 정상 사용자에 대한 서비스 거부). NIST는 연속 실패를 100회로 제한하고 차단 대신 지연과 CAPTCHA를 요구하며, OWASP는 금전 피해를 막는 마지막 통제로 외부 서비스의 지출 한도를 포함합니다.

2026-06-30

인증과 인가의 차이: 로그인만으로는 다른 사용자의 데이터를 지킬 수 없다

인증='누구인가'를 확인하는 것, 인가='그 사람이 무엇을 해도 되는가'를 정하는 것. 둘은 별개이며, 로그인을 붙인 것만으로는 인가가 되지 않는다. 데이터에 소유자(user_id) 스코프가 없으면 '로그인=전체 데이터 열람'이 된다(OWASP 최상위의 Broken Access Control). 게다가 등록이 열린 채인 인증 스캐폴드가 겹치면 제3자가 등록해 로그인할 수 있다. 방어는, 모든 쿼리를 소유자로 좁히기/불필요한 등록 닫기/다층 방어/감사·접근 로그를 사고 나기 전에/신규 등록 탐지.

2026-06-28

패스키란: 공개 키 로그인·피싱 저항·동기화의 차이

패스키는 개인 키의 서명으로 인증하고 로그인 서비스는 공개 키를 보관한다. 동기화 패스키는 암호화된 인증 정보를 기기 사이에 동기화할 수 있으며 기기 고정형은 동기화하지 않는다. MFA 여부는 요구되는 사용자 확인에 달려 있고 기기·동기화 계정·복구 절차의 보호도 중요하다.

2026-06-27

비밀번호 해싱이란? 단방향 변환으로 비밀번호를 안전하게 저장하기

비밀번호 해싱은 비밀번호를 되돌릴 수 없는 단방향 변환으로 저장하는 것입니다. 평문으로 저장하지 마세요. 암호화와 달리 복호화해 되돌릴 수 없으며, 그것이 바로 목적입니다. 그러나 평범한 MD5/SHA-256은 레인보우 테이블과 무차별 대입에 무너집니다. 해법은 사용자별 솔트와 의도적으로 느린 해시(bcrypt/Argon2/scrypt)입니다. 직접 만들지 말고 표준 함수를 사용하세요.

2026-06-27

비밀번호를 안전하게 저장하는 법: 올바른 해싱과 솔트

서버에 비밀번호를 안전하게 저장하는 실전 가이드. 평문·암호화·생 해시가 모두 실패하는 이유를 이해한 뒤 하나의 답으로 수렴합니다: 사용자별 솔트 + 의도적으로 느린 해시(Argon2id 권장, bcrypt/scrypt는 대안). 직접 만들지 말고 표준 함수를 쓰며, 시간이 지날수록 비용을 올리고, 약한 해시는 로그인 시 재해싱으로 이전하세요.

2026-06-12

JWT(JSON Web Token)란? 서명된 토큰의 작동 원리와 안전하게 쓰는 법

JWT는 변조를 감지할 수 있도록 서버가 서명해 발급하는 토큰입니다. header.payload.signature 세 부분으로 이루어지며, 서버가 서명을 검증해 진위를 확인합니다. 주의: (1) 항상 서명을 검증하고 기대하는 alg를 고정(alg:none 거부); (2) 누구나 내용을 읽을 수 있으니 시크릿을 넣지 말 것; (3) 만료를 짧게 두고 폐기 전략을 마련. 디코딩(읽기)과 검증(진위 확인)은 다른 것입니다.