피드로 돌아가기
Dev.toSecurity
원문 읽기
정규식 제약 완화 및 정규화를 통한 인증 성공률 100% 회복
Your OTP regex assumes six digits. Supabase magic links don't.
AI 요약
Context
Supabase GoTrue 기반 OTP 인증 시스템에서 클라이언트 측의 엄격한 6자리 숫자 정규식 검증으로 인한 인증 실패 발생. 서버 설정(GOTRUE_MAILER_OTP_LENGTH)에 따라 OTP 길이가 가변적임에도 불구하고 클라이언트가 특정 길이를 하드코딩하여 유효한 인증 코드를 사전 차단한 구조적 한계 노출.
Technical Solution
- 클라이언트 검증 로직을 Security Control이 아닌 UX Affordance 관점으로 재설계
- 정규식을
^\d{6}$에서^\d{6,10}$로 확장하여 서버 설정 변경에 유연하게 대응하는 Superset 검증 구조 채택 - 단순
trim()대신replace(/\D/g, "")를 적용하여 복사-붙여넣기 시 발생하는 공백, 개행, 특수문자 등 노이즈 제거 - 최종 유효성 판단 권한을 서버의
verifyOtpAPI로 일원화하여 클라이언트-서버 간의 검증 불일치 제거 - 정규화 로직을 통해 사용자 입력 값의 의도를 정확히 추출하는 전처리 프로세스 강화
실천 포인트
- 서버가 발행하는 토큰의 클라이언트 검증 시, 서버 허용 범위의 Superset으로 설계하여 False Rejection 방지 - 입력값 전처리 시 단순 공백 제거가 아닌 Non-digit 문자 전체 제거를 통해 복사-붙여넣기 UX 최적화 - 외부 라이브러리나 튜토리얼의 기본 설정값을 상수가 아닌 가변 설정값으로 인지하고 검토 - 클라이언트 측 에러 메시지가 실제 서버의 거부 사유와 일치하는지 확인