보안 용어집
보안 분야의 개념 30개를 한 장에 모았습니다. 기밀성 보호 · 단일 로그인 출처 · 도메인 쿠키 세션 공유 · 레이트 리미팅 등 — 코드베이스에서 뽑아 뜻과 관계를 정리했습니다.
- 기밀성 보호 (데이터 보호, confidentiality)
- 저장하거나 전송하는 값이 새도 읽히지 않게 암호화한다. 되돌려 읽어야 하면 암호화, 대조만 하면 되면 해싱을 고르고, 암호화는 변조까지 잡는 AEAD 로 한다
- 단일 로그인 출처
- 여러 서브도메인이 있어도 로그인 화면과 OAuth 콜백을 한 호스트에만 둔다. 제공자 콘솔에 등록할 redirect_uri 가 하나로 고정돼 호스트가 늘어도 redirect_uri_mismatch 가 나지 않는다
- 도메인 쿠키 세션 공유
- 토큰을 상위 도메인(.1989v.com) 쿠키에 담아 모든 서브도메인이 같은 로그인 상태를 읽게 한다. JS 가 읽는 쿠키라 XSS 방어가 함께 따라와야 한다
- 레이트 리미팅 (rate limiting, throttling)
- 키(사용자 id · 방문자 IP)마다 일정 시간 요청 수를 제한하고 넘으면 429 로 거절한다. 세는 방식(버킷 · 창)에 따라 순간 몰림을 얼마나 받아 줄지가 달라진다
- 리다이렉트 허용 목록
- 로그인 뒤 돌아갈 주소(next)를 상대 경로와 자기 도메인으로만 제한한다. `//evil.com` 같은 프로토콜 상대 주소도 막는다
- 보안 (application security, 애플리케이션 보안)
- 누가 요청했는지 확인하고(인증), 무엇을 해도 되는지 가르고(인가), 저장한 값을 지키고, 웹 공격과 남용을 막는 일. 암호 기초 → 신원 · 접근 제어 → 애플리케이션 방어 → 보안 운영 순으로 읽는다
- 사전 대입 공격 (dictionary attack)
- 가능한 입력을 전부 해시해 유출된 해시와 맞춰 원문을 알아내는 공격. 형식이 알려진 짧은 값(숫자 식별자 · 흔한 비밀번호)에서 쉽게 성공한다
- 신원 위조 (spoofing)
- 요청자가 남의 신원이나 더 높은 역할을 주장해 통과하는 상태. 내부 헤더를 그대로 믿는 서비스에서 헤더 한 줄로 일어난다
- 신원 헤더 제거
- 게이트웨이가 검증한 신원만 내부 헤더(X-User-Id)로 넘기고, 클라이언트가 직접 붙인 같은 헤더는 벗긴다. 뒤쪽 서비스가 헤더를 믿는 구조의 전제 조건이다
- 암호화 (encryption)
- 키로 데이터를 읽을 수 없게 바꾸고 같은(대칭) 또는 짝(비대칭) 키로 되돌리는 기법. 원문을 다시 읽어야 할 때 쓰고, 키 보관이 곧 보안 수준이다
- 인가 (authorization, AuthZ, access control)
- 확인된 신원이 이 자원 · 이 동작을 해도 되는지 가른다. 역할 · 속성 · 관계 중 무엇으로 판정할지 모델을 고르고, 판정을 요청 경로의 모든 자원 접근에 빠짐없이 건다
- 인증 (authentication, AuthN)
- 요청한 사람이 누구인지 확인한다. 직접 비밀번호 · 2차 요소를 받거나, 믿을 만한 제공자(IdP)에게 확인을 위임하고 결과만 받는다
- 인증서 만료
- TLS 인증서가 기한을 넘겨 브라우저가 접속을 막는 상태. 손으로 갱신하면 언젠가 잊는다
- 인증서 자동 발급 · 갱신 (ACME, Let's Encrypt)
- ACME 챌린지로 도메인 소유를 증명해 TLS 인증서를 받고, 만료 전에 알아서 다시 받는다
- 입력 · 출력 방어 (웹 공격 방어, injection defense)
- 사용자 입력이 질의 · 명령 · HTML · URL · 객체로 해석되는 모든 자리에서 값이 구조를 바꾸지 못하게 한다. 입력은 검증하고, 조립은 바인딩하고, 출력은 문맥에 맞게 인코딩한다
- 출력 정화 (sanitize, HTML sanitization)
- 사용자가 쓴 HTML 을 그대로 그려야 할 때 스크립트 · 이벤트 속성 · 위험 태그를 걷어 낸다. 입력 시점이 아니라 그리는 시점에 건다
- 토큰 폐기 (token blacklist, denylist, jti denylist, RFC 7009)
- 로그아웃한 토큰을 남은 수명 동안 블랙리스트에 올리고 요청마다 확인한다. 무상태 토큰에 상태 조회 한 번을 되돌려 놓는 대가로 즉시 무효화를 얻는다
- 파라미터 바인딩 (prepared statement, bind parameter)
- 입력값을 SQL 문자열에 이어 붙이지 않고 자리표시자에 값으로 묶는다. DB 가 질의 구조와 값을 따로 받으므로 입력이 구문으로 해석되지 않는다
- 해싱 (hash, cryptographic hash)
- 임의 길이 값을 고정 길이 값으로 바꾸는 단방향 함수. 원문을 복원하지 않고 같은지만 대조할 때 쓴다. 값의 공간이 좁으면 사전 대입으로 되돌려진다
- cert-manager
- 쿠버네티스 안에서 인증서 발급 · 갱신을 자동화하는 컨트롤러. 이 레포는 Let's Encrypt HTTP01 ClusterIssuer 를 쓴다
- CORS (Cross-Origin Resource Sharing)
- 동일 출처 정책이 막는 다른 출처 요청을 서버가 응답 헤더로 허용 목록을 밝혀 풀어 주는 브라우저 규칙. 막는 장치가 아니라 푸는 장치라, 와일드카드 대신 정확한 출처만 적는다
- CSRF (Cross-Site Request Forgery, 사이트 간 요청 위조)
- 다른 사이트가 로그인된 사용자의 브라우저로 우리 서버에 요청을 보내게 하는 공격. 브라우저가 쿠키를 자동으로 싣기 때문에 생긴다. 토큰을 Authorization 헤더로만 받는 API 는 쿠키만으로 인증되지 않아 CSRF 토큰 필터를 끈다
- HMAC (Hash-based Message Authentication Code, HmacSHA256, keyed hash)
- 비밀 키를 섞어 두 번 해시하는 MAC. 키 없이는 같은 값을 만들 수 없어 좁은 값 공간도 사전 대입으로 되돌릴 수 없다. 서명 토큰 · 웹훅 · 소셜 식별값 가명처리에 쓴다
- JWT (JSON Web Token, RFC 7519)
- 헤더 · 클레임 · 서명 세 부분을 점으로 이은 토큰으로, 받는 쪽이 저장소 조회 없이 서명만 검증해 신원을 믿는 무상태 인증 방식. 대신 발급한 토큰을 만료 전에 거둘 수 없어 폐기 장치를 따로 둔다
- OAuth (OAuth 2.0, OAuth 2.1)
- 사용자가 제공자(Google · Kakao)에서 동의하면 클라이언트가 그 사용자 대신 자원에 접근할 토큰을 받는 위임 인가 프레임워크. 원래 인가용이고, 로그인에 쓰려면 위에 OIDC 를 얹는다
- RBAC (Role-Based Access Control, 역할 기반 접근 제어)
- 사용자에게 역할을 주고 역할마다 허용 범위를 정하는 접근 제어 모델. 역할은 회원-역할 행에 두고 토큰 클레임에 실어 게이트웨이가 라우트마다 필요한 역할과 대조한다
- SameSite 쿠키 (SameSite=Lax, SameSite=Strict)
- 다른 사이트에서 시작된 요청에 쿠키를 싣지 않도록 브라우저에 지시하는 쿠키 속성. Lax 는 최상위 이동(GET)만 허용해 교차 사이트 POST 를 막는다
- Spring Security
- 스프링의 인증 · 인가 필터 체인 라이브러리. 이 레포에서는 무상태 세션과 CSRF 해제만 정하고, 실제 토큰 검사와 역할 검사는 게이트웨이 필터가 한다
- SQL 인젝션 (SQL injection, SQLi)
- 입력값이 SQL 문자열에 이어 붙어 질의 구조를 바꾸는 상태. 조건을 무력화해 남의 행을 읽거나 지운다
- XSS (Cross-Site Scripting, 크로스 사이트 스크립팅, stored XSS, reflected XSS, DOM XSS)
- 공격자가 넣은 스크립트가 다른 사용자의 브라우저에서 우리 출처 권한으로 실행되는 상태. JS 가 읽을 수 있는 쿠키 · 저장소의 토큰을 그대로 가져간다
다른 분류