Security
이 페이지는 Better Auth의 보안 기능에 대한 정보를 포함하고 있습니다.
비밀번호 해싱
Better Auth는 기본적으로 scrypt 알고리즘을 사용하여 비밀번호를 해싱합니다. 이 알고리즘은 메모리 집약적이고 CPU 집약적으로 설계되어 무차별 대입 공격에 대한 저항력이 있습니다. 구성에서 password 옵션을 설정하여 비밀번호 해싱 함수를 커스터마이징할 수 있습니다. 이 옵션은 비밀번호를 해싱하는 hash 함수와 비밀번호를 검증하는 verify 함수를 포함해야 합니다.
세션 관리
세션 만료
Better Auth는 사용자 데이터를 보호하기 위해 안전한 세션 관리를 사용합니다. 세션은 구성된 경우 데이터베이스 또는 보조 스토리지에 저장되어 무단 접근을 방지합니다. 기본적으로 세션은 7일 후에 만료되지만, 구성에서 이 값을 커스터마이징할 수 있습니다. 또한, 세션이 사용될 때마다 updateAge 임계값에 도달하면 만료 날짜가 연장되며, 기본적으로 1일로 설정되어 있습니다.
세션 취소
Better Auth는 보안을 강화하기 위해 세션을 취소할 수 있습니다. 세션이 취소되면 사용자는 로그아웃되고 더 이상 애플리케이션에 접근할 수 없습니다. 로그인한 사용자는 다른 기기나 브라우저에서 로그아웃하기 위해 자신의 세션을 취소할 수도 있습니다.
자세한 내용은 세션 관리를 참조하세요.
CSRF 보호
Better Auth는 요청의 Origin 헤더를 검증하여 CSRF 보호를 보장합니다. 이 확인은 요청이 애플리케이션 또는 신뢰할 수 있는 소스에서 시작되었음을 확인합니다. 신뢰할 수 없는 origin에서 요청이 오면 잠재적인 CSRF 공격을 방지하기 위해 차단됩니다. 기본적으로 기본 URL과 일치하는 origin은 신뢰되지만, trustedOrigins 구성 옵션에서 신뢰할 수 있는 origin 목록을 설정할 수 있습니다.
OAuth State 및 PKCE
OAuth 플로우를 보호하기 위해 Better Auth는 OAuth state 및 PKCE (Proof Key for Code Exchange)를 데이터베이스에 저장합니다. State는 CSRF 공격을 방지하는 데 도움이 되고, PKCE는 코드 주입 위협으로부터 보호합니다. OAuth 프로세스가 완료되면 이러한 값은 데이터베이스에서 제거됩니다.
쿠키
Better Auth는 기본 URL이 https를 사용할 때 기본적으로 보안 쿠키를 할당합니다. 이러한 보안 쿠키는 암호화되어 보안 연결을 통해서만 전송되어 추가 보호 계층을 제공합니다. 또한 sameSite 속성이 기본적으로 lax로 설정되어 교차 사이트 요청 위조 공격을 방지합니다. 그리고 httpOnly 속성이 활성화되어 클라이언트 측 JavaScript가 쿠키에 접근하는 것을 방지합니다.
크로스 서브도메인 쿠키의 경우, 구성에서 crossSubDomainCookies 옵션을 설정할 수 있습니다. 이 옵션은 쿠키를 서브도메인 간에 공유할 수 있게 하여 여러 서브도메인에서 원활한 인증을 가능하게 합니다.
쿠키 커스터마이징
핑거프린팅 공격의 위험을 최소화하기 위해 쿠키 이름을 커스터마이징하고 추가 제어를 위해 필요에 따라 특정 쿠키 옵션을 설정할 수 있습니다. 자세한 내용은 쿠키 옵션을 참조하세요.
플러그인은 특정 보안 요구 사항에 맞게 커스텀 쿠키 옵션을 설정할 수도 있습니다. 비브라우저 환경에서 Better Auth를 사용하는 경우, 플러그인은 해당 컨텍스트에서 쿠키를 안전하게 관리하는 방법을 제공합니다.
Rate Limiting
Better Auth는 무차별 대입 공격으로부터 보호하기 위한 내장 rate limiting을 포함합니다. Rate limit는 기본적으로 모든 라우트에 적용되며, 잠재적 위험에 따라 특정 라우트에는 더 엄격한 제한이 적용됩니다.
IP 주소 헤더
Better Auth는 rate limiting 및 보안 모니터링을 위해 클라이언트 IP 주소를 사용합니다. 기본적으로 표준 X-Forwarded-For 헤더에서 IP 주소를 읽습니다. 하지만 정확한 IP 주소 감지를 보장하고 IP 스푸핑 공격을 방지하기 위해 특정 신뢰할 수 있는 헤더를 구성할 수 있습니다.
Better Auth 구성에서 IP 주소 헤더를 구성할 수 있습니다:
{
advanced: {
ipAddress: {
ipAddressHeaders: ['cf-connecting-ip'] // 또는 다른 커스텀 헤더
}
}
}이를 통해 Better Auth는 신뢰할 수 있는 프록시의 헤더에서만 IP 주소를 수락하여, 공격자가 헤더를 스푸핑하여 rate limiting 또는 다른 IP 기반 보안 조치를 우회하는 것을 더 어렵게 만듭니다.
중요: 커스텀 IP 주소 헤더를 설정할 때는 프록시 또는 로드 밸런서가 이 헤더를 설정하도록 적절히 구성되어 있고, 최종 사용자가 직접 설정할 수 없는지 확인하세요.
신뢰할 수 있는 Origins
신뢰할 수 있는 origin은 CSRF 공격을 방지하고 개방형 리디렉션을 차단합니다. trustedOrigins 구성 옵션에서 신뢰할 수 있는 origin 목록을 설정할 수 있습니다. 이 목록에 없는 origin의 요청은 자동으로 차단됩니다.
기본 사용법
가장 기본적인 사용법은 정확한 origin을 지정하는 것입니다:
{
trustedOrigins: [
"https://example.com",
"https://app.example.com",
"http://localhost:3000"
]
}와일드카드 도메인
Better Auth는 신뢰할 수 있는 origin에서 와일드카드 패턴을 지원하여, 단일 항목으로 여러 서브도메인을 신뢰할 수 있습니다:
{
trustedOrigins: [
"*.example.com", // example.com의 모든 서브도메인 신뢰 (모든 프로토콜)
"https://*.example.com", // example.com의 HTTPS 서브도메인만 신뢰
"http://*.dev.example.com" // dev.example.com의 모든 HTTP 서브도메인 신뢰
]
}프로토콜 특정 와일드카드
프로토콜 접두사가 있는 와일드카드 패턴을 사용하는 경우 (https://와 같이):
- 프로토콜은 정확히 일치해야 합니다
- 도메인은
*자리에 모든 서브도메인을 가질 수 있습니다 - 도메인이 일치하더라도 다른 프로토콜을 사용하는 요청은 거부됩니다
프로토콜 무관 와일드카드
프로토콜 접두사 없이 와일드카드 패턴을 사용하는 경우 (*.example.com과 같이):
- 모든 프로토콜 (http, https 등)이 허용됩니다
- 도메인은 와일드카드 패턴과 일치해야 합니다
커스텀 스킴
신뢰할 수 있는 origin은 모바일 앱 및 브라우저 확장 프로그램을 위한 커스텀 스킴도 지원합니다:
{
trustedOrigins: [
"myapp://", // 모바일 앱 스킴
"chrome-extension://YOUR_EXTENSION_ID" // 브라우저 확장 프로그램
]
}취약점 보고
Better Auth에서 보안 취약점을 발견하면 security@better-auth.com으로 보고해 주세요. 모든 보고는 신속하게 처리되며, 검증된 발견에 대해서는 크레딧이 제공됩니다.