보안 용어집

보안 분야의 개념 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 가 읽을 수 있는 쿠키 · 저장소의 토큰을 그대로 가져간다

다른 분류