draw io 링크
https://drive.google.com/file/d/1NZfjJ4QznXf5kasNnzXIFe3CnFZOHWG9/view?usp=sharing
11장.drawio
drive.google.com
클라이언트 식별과 쿠키
HTTP 특징
- 무상태
- 요청과 응답으로 통신
개인화된 서비스를 제공하고 싶은 웹 사이트들
- 개별 인사
- 사용자 맞춤 추천
- 저장된 사용자 정보
- 세션 추적
- 무상태, 독립적으로 일어나는 각 요청 및 응답
- 사용자와 사이트의 상호작용 → 상태를 남김(쇼핑몰 장바구니 기능)
사용자 식별 기술
- 사용자 식별 관련 정보를 전달하는 HTTP 헤더
- 클라이언트 IP 주소 추적
- 사용자 로그인 인증
- Fat URL - URL + 식별자
- 식별 정보 유지 지속 쿠키
HTTP 헤더
헤더 이름 헤더 타입 설명
From | 요청 | 사용자의 이메일 주소 |
User-Agent | 요청 | 사용자의 브라우저 |
Referer | 요청 | 사용자가 현재 링크를 타고 온 근원 페이지 |
Authorization | 요청 | 사용자 이름과 비밀번호 |
Client-ip | 확장(요청) | 클라이언트의 IP 주소 |
X-Forwarded-For | 확장(요청) | 클라이언트의 IP 주소 |
Cookie | 확장(요청) | 서버가 생성한 ID 라벨 |
- From - 악의적 서버의 스팸 메일 발송 문제 있음. 로봇/스파이더는 웹 마스터 항의를 받은 이메일 주소를 기술함
- User-Agent - 사용자가 쓰고있는 브라우저의 이름과 버전정보, 운영체제 정보까지 포함하기도 함.
- 특정 브라우저에서 잘 동작하도록 콘텐츠 최적화에 유용함.
- 특정 사용자를 식별하는 데는 큰 도움이 되지 않음
- Referer - 사용자가 현재 페이지로 유입하게 한 웹페이지의 URL
- 사용자가 이전에 어떤 페이지를 방문했었는지는 알려줌.
⇒ 특정 사용자를 확실히 식별하기에는 부족함
클라이언트 IP 주소
사용자 식별에 IP 주소 사용
- 사용자가 아닌, 사용자가 사용하는 컴퓨터를 가리킴
- 여러 사용자가 같은 컴퓨터를 사용하면 특정 사용자 식별 불가능
- 사용자 로그인시 ISP 동적 IP 주소 할당
- 로그인한 시간에 따라 사용자는 매번 다른 주소를 받음
- NAT 방화벽 - 실제 IP 주소를 방화벽 뒤로 숨김.
- 내부에서 사용하는 하나의 방화벽 IP 주소로 변환
- 프락시와 게이트웨이는 원 서버에 새로운 TCP 연결을 함.
- 웹 서버는 클라이언트 대신 프락시의 IP 주소를 봄
- Client-ip, X-Forwarded-For-HTTP : 프락시가 원본 IP 주소를 보존하려고 추가하는 확장 헤더
- 모든 프락시가 이런 식으로 동작하진 않음.
사용자 로그인
로그인 요구 → 사용자에게 명시적으로 식별 요청 가능
웹 사이트에 사용자 이름을 전달하는 자체적 체계 존재
- WWW-Authenticate, Authorization 헤더
- 사이트 접근 전 로그인 요구 → 401 Login Required 응답 코드 전송
- 사용자가 요청마다 로그인하지 않게 브라우저 대부분은 사이트에 대한 로그인 정보를 기억하여 사이트로 보내는 각 요청에 로그인 정보를 전달하게 됨
- 서버는 사이트 접근 전 로그인을 요구한다.
- 401 상태코드와 WWW-authenticate 헤더를 전송한다.
- 사용자가 이름과 비밀번호를 입력하고 브라우저는 기존 요청을 다시 보내서 사용자 식별을 시도한다.
- 이제 서버는 사용자의 식별정보를 안다
- 이후 요청에 대해, 브라우저는 서버로부터 사용자 식별 정보를 요청받으면, 서버에서 오는 요청에 대해 자동으로 사용자 이름과 비밀번호를 포함한다.
- 요청하지 않았을 때에도 전달
- 요청마다 해당 사용자의 식별정보 토큰을 Authorization 헤더에 담아 서버로 전송, 한 세션이 진행되는 내내 그 사용자에 대한 식별을 유지한다.
단점 : 사이트를 옮겨다닐 때마다 각 사이트에 로그인 해야함.
- 이름 선점, 비밀번호 규칙 차이 등
뚱뚱한 URL
사용자의 URL마다 버전을 기술하여 사용자를 식별하고 추적하는 웹 사이트
- URL의 처음이나 끝에 어떤 상태정보를 추가해 확장
- 사용자의 상태정보를 포함하고 있는 URL
- 온라인 쇼핑몰을 돌아다니는 사용자에게 식별번호를 할당, 각 URL 뒤에 붙여서 사용자 추적
HTTP 트랜잭션을 하나의 ‘세션’ or ‘방문’으로 묶는 용도
- 처음 방문한 사용자에 대한 유일한 ID 생성
- 서버가 인식 → 클라이언트를 fat url로 리다이렉트 시킴
- fat url을 포함한 요청을 받으면, 사용자 아이디와 관련된 추가적인 정보(쇼핑카트,프로필 등)를 찾아서 밖으로 향하는 모든 하이퍼링크를 fat url로 바꿈
단점
- 못생긴 url - 사용자들에게 혼란을 줌
- 공유하지 못하는 url : 특정 사용자와 세션에 대한 상태정보 포함 → 개인정보를 공개하게됨
- 캐시를 사용할 수 없음 : URL이 달라지기 때문에 기존 캐시에 접근 불가능
- 서버 부하 가중 : fat url에 해당하는 html 페이지를 다시 그려야 함.
- 이탈 : 링크를 타고 다른 사이트로 이동하거나 특정 URL을 요청 → 의도치않게 해당 세션에서 ‘이탈’하게 됨
- 사전에 세션 정보가 추가된 링크만을 사용해야 fat url이 문제없이 동작함
- 이탈 시 초기화 후 처음부터 시작 ← 쇼핑 장바구니 등
- 세션 간 지속성의 부재 : 특정 Fat URL을 북마크하지 않는 이상, 로그아웃하면 모든 정보 유실
쿠키
- 넷스케이프 최초 개발
- 캐시 충돌 가능성 → 쿠키에 있는 내용물 캐싱하지 않음
타입
- 세션 쿠키
- 임시 쿠키
- 사용자가 브라우저를 닫으면 삭제됨
- 지속 쿠키
- 디스크 저장 → 재시작 해도 남아있음.
사이트마다 다른 쿠키
쿠키가 수백, 수천 개 가능 but 두세개만 전송함.
- 쿠키를 모두 전달하면 성능 저하
- 대부분의 쿠키는 서버에 특화된 이름/값 쌍 포함, 대부분 사이트에서는 인식하지 않는 무의미한 값
광고 쿠키
- 웹사이트와 협력업체의 광고계약
- 광고들은 웹 사이트 자체의 일부인 것처럼 제작되고, 지속 쿠키를 만들어냄
- 같은 광고사에서 제공하는 서로 다른 웹 사이트에 사용자가 방문하면, 브라우저는 앞서 만든 지속 쿠키를 다시 광고사 서버로 전송한다.
- 지속 쿠키의 도메인이 같기 때문
- Referer 헤더를 접목하여 사용자의 프로필과 웹 사이트를 사용하는 습관에 대한 방대한 데이터를 구축할 수 있음.
- 최신 브라우저 개인정보 설정 기능 → 쿠키 사용 방식에 제약
쿠키 Domain 속성
서버는 응답 헤더에 Set-cookie 헤더의 domain 속성을 사용해 어떤 사이트가 그 쿠키를 읽을 수 있는지 제어할 수 있음
Set-cookie: user="mary17"; domain="example.com"
- example.com으로 끝나는 사이트를 방문하면 Cookie: user=”mary17” 헤더가 항상 적용됨
path 속성
웹 사이트 일부에만 쿠키 적용
각각 쿠키를 별도로 갖는 두 개의 조직이 한 개의 웹 서버를 공유할 경우
Set-cookie: pref=compact; domain="example.com"; path=/autos/
사용자가 /autos/ 경로에 접근하면 쿠키를 두 가지 받게됨.
Cookie: user="mary17"
Cookie: pref=compact
쿠키 구성요소
Version 0 쿠키(넷스케이프)
- Version 1 쿠키 → Version 0 쿠키의 확장, 널리 쓰이진 않음
- 최초의 쿠키 명세
Set-Cookie: name=value [; expires=date] [; path=path] [; domain=domain] [; secure]
- expires : 쿠키의 생명주기를 가리킴.
- 요일, DD-MM-YY HH:MM:SS GMT
- GMT만 사용가능
- 쿠키에 Expires를 명시하지 않으면 사용자의 세션이 끝날 때 파기됨
- domain
- path
- secure : HTTP가 SSL 보안 연결을 사용할 때만 쿠키 전송
- client가 쿠키값을 변경할 수도 있음. → 쿠키 정보 변경 case
- 클라이언트 개발할 때마다 기존 서버 쿠키를 받아서 행위등의 정보를 싣어서 서버에게 보낼 수 있음
- secure 쿠키는 클라이언트에서 정보 변경 불가능
- 개발할 땐 풀어놨다가, 운영 시에는 바꾸는 방식
버전 1 쿠키(RFC2965) 는 폐기되어 더 이상 지원되지 않음
- 쿠키마다 그 목적을 설명하는 설명문이 있음
- 파기 주기에 상관없이 브라우저가 닫히면 쿠키를 강제로 삭제할 수 있다.
- Max-Age: 절대 날짜 값 대신에 초 단위 상대값으로 생명 주기를 결정할 수 있음
- URL의 포트번호로도 쿠키를 제어할 수 있음.
- 도메인, 포트, 경로 필터가 있으면 Cookie 헤더에 담겨 되돌려보냄
- cookie2 = “Cookie2:” cookie-version : 호환되는 버전 번호
세션 추적
캐시
개인정보 유출, 이전 사용자의 쿠키를 다른 사용자에게 할당 등 문제로 쿠키는 캐시하지 않는 게 좋음
Cache-Control: no-cache="Set-Cookie"
- 문서의 본문은 캐시하더라도 Set-Cookie 헤더는 제외해야함
- 여러 사용자에게 보내게 되면, 사용자 추적에 실패함.
- → 캐시는 공용인 경우가 많으니까 쿠키 헤더가 여러명에게 보내질 수 있다는건가?
- 어떤 캐시는 응답을 저장하기 전에 Set-Cookie 헤더를 제거함 → 해당 헤더 정보가 없는 데이터를 받게 됨 → 문제 발생
- 개선 방안 : 모든 요청마다 원 서버와 재검사해서 Set-Cookie 헤더 추가
Cache-Control: **must-revalidate, max-age=0**
- 보수적인 캐시는 콘텐츠가 캐시 가능한 데이터여도 set-cookie 헤더가 있는 응답은 캐시하지않을 수 있음
- 어떤 캐시는 쿠키헤더가 있는 이미지는 캐시하고, 텍스트는 캐시하지 않기도 함.
Cookie 헤더를 갖고 있는 요청을 주의해라
- 요청 + 쿠키 = 결과 콘텐츠가 개인정보를 담고있을 수도 있다.
- 위에서 말한 Set-Cookie 헤더가 포함된 이미지는 해도, 텍스트는 캐시하지 않는 경우에 속함.
- 더 효율적인 방식 = 캐시 이미지에 파기 시간이 0인 cookie 헤더를 설정해서 매번 재검사하도록 강제함.
<aside> 💡
max-age : 문서의 최대 나이 정의 문서가 처음 생성된 이후~제공하기엔 더 이상 신선하지 않다고 간주될 때까지 경과한 시간의 합법적인 최댓값(초 단위)
</aside>
쿠키가 보안상으로 엄청나게 위험한 것은 아니다.
- 쿠키 사용 비활성화, 로그 파일 분석으로 대체도 가능
- 원격 DB에 개인 정보를 저장하고, 쿠키에 해당 데이터의 키 값을 저장하는 방식을 사용하면, 클라이언트와 서버 사이에 예민한 데이터가 오가는 것을 줄일 수 있다.
로그 파일을 분석해도 사용자의 브라우징 습관을 추적할 수 있다. 쿠키는 그것을 좀 더 편리하게 해주는 방식
jwt 토큰도 쿠키에 저장해서 많이 사용함.
- 불변으로 만들어놓기도 하고
- 쿠키에 저장하는건 굉장히 위험 → 세션 스토리지
- 세션 스토리지 - 요청을 하면 세션이 하나 만들어짐(커넥션처럼)
- 서블릿 → jsession-id
- 브라우저가 닫히기 전까지 정보가 디스크에 유지됨
- 세션 id마다 할당된 스토리지
- 중요 정보는 넣지 않는다.
- mid(my id) - 클라이언트에 세팅 ← 이것과 뭔가 더 조합
- 쿠키를 탈취하더라도 안전하도록
- 로컬 스토리지 - 쿠키와 비슷한 애. 로컬 디스크에 저장, 아무나 볼 수 있음.
- 브라우저 내 파일에 저장
- 세션 스토리지 - 요청을 하면 세션이 하나 만들어짐(커넥션처럼)
인증과 인가
- 인증(Authentication)은 이 사람이 그 사람이 맞냐
- 인가(Authorization)는 이 사람이 적법한 권한을 갖고 있는 유저인가.
- 이 url에 보낼 수 있는가
프록시 서버나 api gateway ip가 서버로 올라감
- 진짜 클라이언트 ip는 X-Forward-For로 알아냄
- 특정 ip나 대역만 서버를 사용할 수 있도록
- ex) 가맹점 외 ip 대역은 통과 시키지 못하도록 사전 차단
- 중간에 프록시가 껴있으면 검사가 안됨
User-Agent
- pc용 api, 모바일용 api 등 구분 가능
Referer
- 어떤 화면으로부터 api가 호출되었는지
브라우저를 오픈할 때 세션이 만들어짐. → 세션 쿠키
- user의 로그인한 키 세팅
- 인증값, 보안적으로 필요, 일시적으로 저장해야하는 것들
- 나 아닌 다른 유저가 세션 쿠키를 볼 수 없음.
지속 쿠키에는 사용자의 로그인 키 세팅 안함
- 처리상태, user의 상태 정보 등을 저장
회원 탈퇴 정보는 서버. 클라이언트x
매번 재검사 → 서버에서 매번 다시 들고내려옴
쿠키를 http-response에 내려보는 테스트 해보기
- secure 속성 설정
샌드박스
- 안팎으로 제한된
회사에서 A.naver.com, B.naver.com 사용
- CORS(Cross Origin Resource Sharing) : 어떤 도메인끼리는 CORS로 묶여있는 서버
- 무상태
- 요청과 응답으로 통신
- 개별 인사
- 사용자 맞춤 추천
- 저장된 사용자 정보
- 세션 추적
- 무상태, 독립적으로 일어나는 각 요청 및 응답
- 사용자와 사이트의 상호작용 → 상태를 남김(쇼핑몰 장바구니 기능)
- 사용자 식별 관련 정보를 전달하는 HTTP 헤더
- 클라이언트 IP 주소 추적
- 사용자 로그인 인증
- Fat URL - URL + 식별자
- 식별 정보 유지 지속 쿠키
From 요청 사용자의 이메일 주소 User-Agent 요청 사용자의 브라우저 Referer 요청 사용자가 현재 링크를 타고 온 근원 페이지 Authorization 요청 사용자 이름과 비밀번호 Client-ip 확장(요청) 클라이언트의 IP 주소 X-Forwarded-For 확장(요청) 클라이언트의 IP 주소 Cookie 확장(요청) 서버가 생성한 ID 라벨 - From - 악의적 서버의 스팸 메일 발송 문제 있음. 로봇/스파이더는 웹 마스터 항의를 받은 이메일 주소를 기술함
- User-Agent - 사용자가 쓰고있는 브라우저의 이름과 버전정보, 운영체제 정보까지 포함하기도 함.
- 특정 브라우저에서 잘 동작하도록 콘텐츠 최적화에 유용함.
- 특정 사용자를 식별하는 데는 큰 도움이 되지 않음
- Referer - 사용자가 현재 페이지로 유입하게 한 웹페이지의 URL
- 사용자가 이전에 어떤 페이지를 방문했었는지는 알려줌.
- 사용자가 아닌, 사용자가 사용하는 컴퓨터를 가리킴
- 여러 사용자가 같은 컴퓨터를 사용하면 특정 사용자 식별 불가능
- 사용자 로그인시 ISP 동적 IP 주소 할당
- 로그인한 시간에 따라 사용자는 매번 다른 주소를 받음
- NAT 방화벽 - 실제 IP 주소를 방화벽 뒤로 숨김.
- 내부에서 사용하는 하나의 방화벽 IP 주소로 변환
- 프락시와 게이트웨이는 원 서버에 새로운 TCP 연결을 함.
- 웹 서버는 클라이언트 대신 프락시의 IP 주소를 봄
- Client-ip, X-Forwarded-For-HTTP : 프락시가 원본 IP 주소를 보존하려고 추가하는 확장 헤더
- 모든 프락시가 이런 식으로 동작하진 않음.
- WWW-Authenticate, Authorization 헤더
- 사이트 접근 전 로그인 요구 → 401 Login Required 응답 코드 전송
- 사용자가 요청마다 로그인하지 않게 브라우저 대부분은 사이트에 대한 로그인 정보를 기억하여 사이트로 보내는 각 요청에 로그인 정보를 전달하게 됨
- 서버는 사이트 접근 전 로그인을 요구한다.
- 401 상태코드와 WWW-authenticate 헤더를 전송한다.
- 사용자가 이름과 비밀번호를 입력하고 브라우저는 기존 요청을 다시 보내서 사용자 식별을 시도한다.
- 이제 서버는 사용자의 식별정보를 안다
- 이후 요청에 대해, 브라우저는 서버로부터 사용자 식별 정보를 요청받으면, 서버에서 오는 요청에 대해 자동으로 사용자 이름과 비밀번호를 포함한다.
- 요청하지 않았을 때에도 전달
- 요청마다 해당 사용자의 식별정보 토큰을 Authorization 헤더에 담아 서버로 전송, 한 세션이 진행되는 내내 그 사용자에 대한 식별을 유지한다.
- 이름 선점, 비밀번호 규칙 차이 등
- URL의 처음이나 끝에 어떤 상태정보를 추가해 확장
- 사용자의 상태정보를 포함하고 있는 URL
- 온라인 쇼핑몰을 돌아다니는 사용자에게 식별번호를 할당, 각 URL 뒤에 붙여서 사용자 추적
- 처음 방문한 사용자에 대한 유일한 ID 생성
- 서버가 인식 → 클라이언트를 fat url로 리다이렉트 시킴
- fat url을 포함한 요청을 받으면, 사용자 아이디와 관련된 추가적인 정보(쇼핑카트,프로필 등)를 찾아서 밖으로 향하는 모든 하이퍼링크를 fat url로 바꿈
- 못생긴 url - 사용자들에게 혼란을 줌
- 공유하지 못하는 url : 특정 사용자와 세션에 대한 상태정보 포함 → 개인정보를 공개하게됨
- 캐시를 사용할 수 없음 : URL이 달라지기 때문에 기존 캐시에 접근 불가능
- 서버 부하 가중 : fat url에 해당하는 html 페이지를 다시 그려야 함.
- 이탈 : 링크를 타고 다른 사이트로 이동하거나 특정 URL을 요청 → 의도치않게 해당 세션에서 ‘이탈’하게 됨
- 사전에 세션 정보가 추가된 링크만을 사용해야 fat url이 문제없이 동작함
- 이탈 시 초기화 후 처음부터 시작 ← 쇼핑 장바구니 등
- 세션 간 지속성의 부재 : 특정 Fat URL을 북마크하지 않는 이상, 로그아웃하면 모든 정보 유실
- 넷스케이프 최초 개발
- 캐시 충돌 가능성 → 쿠키에 있는 내용물 캐싱하지 않음
- 세션 쿠키
- 임시 쿠키
- 사용자가 브라우저를 닫으면 삭제됨
- 지속 쿠키
- 디스크 저장 → 재시작 해도 남아있음.
- 쿠키를 모두 전달하면 성능 저하
- 대부분의 쿠키는 서버에 특화된 이름/값 쌍 포함, 대부분 사이트에서는 인식하지 않는 무의미한 값
- 웹사이트와 협력업체의 광고계약
- 광고들은 웹 사이트 자체의 일부인 것처럼 제작되고, 지속 쿠키를 만들어냄
- 같은 광고사에서 제공하는 서로 다른 웹 사이트에 사용자가 방문하면, 브라우저는 앞서 만든 지속 쿠키를 다시 광고사 서버로 전송한다.
- 지속 쿠키의 도메인이 같기 때문
- Referer 헤더를 접목하여 사용자의 프로필과 웹 사이트를 사용하는 습관에 대한 방대한 데이터를 구축할 수 있음.
- 최신 브라우저 개인정보 설정 기능 → 쿠키 사용 방식에 제약
Set-cookie: user="mary17"; domain="example.com"
- example.com으로 끝나는 사이트를 방문하면 Cookie: user=”mary17” 헤더가 항상 적용됨
- Version 1 쿠키 → Version 0 쿠키의 확장, 널리 쓰이진 않음
- 최초의 쿠키 명세
Set-Cookie: name=value [; expires=date] [; path=path] [; domain=domain] [; secure]
- expires : 쿠키의 생명주기를 가리킴.
- 요일, DD-MM-YY HH:MM:SS GMT
- GMT만 사용가능
- 쿠키에 Expires를 명시하지 않으면 사용자의 세션이 끝날 때 파기됨
- domain
- path
- secure : HTTP가 SSL 보안 연결을 사용할 때만 쿠키 전송
- client가 쿠키값을 변경할 수도 있음. → 쿠키 정보 변경 case
- 클라이언트 개발할 때마다 기존 서버 쿠키를 받아서 행위등의 정보를 싣어서 서버에게 보낼 수 있음
- secure 쿠키는 클라이언트에서 정보 변경 불가능
- 개발할 땐 풀어놨다가, 운영 시에는 바꾸는 방식
- 쿠키마다 그 목적을 설명하는 설명문이 있음
- 파기 주기에 상관없이 브라우저가 닫히면 쿠키를 강제로 삭제할 수 있다.
- Max-Age: 절대 날짜 값 대신에 초 단위 상대값으로 생명 주기를 결정할 수 있음
- URL의 포트번호로도 쿠키를 제어할 수 있음.
- 도메인, 포트, 경로 필터가 있으면 Cookie 헤더에 담겨 되돌려보냄
- cookie2 = “Cookie2:” cookie-version : 호환되는 버전 번호
- 문서의 본문은 캐시하더라도 Set-Cookie 헤더는 제외해야함
- 여러 사용자에게 보내게 되면, 사용자 추적에 실패함.
- → 캐시는 공용인 경우가 많으니까 쿠키 헤더가 여러명에게 보내질 수 있다는건가?
- 어떤 캐시는 응답을 저장하기 전에 Set-Cookie 헤더를 제거함 → 해당 헤더 정보가 없는 데이터를 받게 됨 → 문제 발생
- 개선 방안 : 모든 요청마다 원 서버와 재검사해서 Set-Cookie 헤더 추가
Cache-Control: **must-revalidate, max-age=0**
- 보수적인 캐시는 콘텐츠가 캐시 가능한 데이터여도 set-cookie 헤더가 있는 응답은 캐시하지않을 수 있음
- 어떤 캐시는 쿠키헤더가 있는 이미지는 캐시하고, 텍스트는 캐시하지 않기도 함.
- 요청 + 쿠키 = 결과 콘텐츠가 개인정보를 담고있을 수도 있다.
- 위에서 말한 Set-Cookie 헤더가 포함된 이미지는 해도, 텍스트는 캐시하지 않는 경우에 속함.
- 더 효율적인 방식 = 캐시 이미지에 파기 시간이 0인 cookie 헤더를 설정해서 매번 재검사하도록 강제함.
- 쿠키 사용 비활성화, 로그 파일 분석으로 대체도 가능
- 원격 DB에 개인 정보를 저장하고, 쿠키에 해당 데이터의 키 값을 저장하는 방식을 사용하면, 클라이언트와 서버 사이에 예민한 데이터가 오가는 것을 줄일 수 있다.
jwt 토큰도 쿠키에 저장해서 많이 사용함.- 불변으로 만들어놓기도 하고
- 쿠키에 저장하는건 굉장히 위험 → 세션 스토리지
- 세션 스토리지 - 요청을 하면 세션이 하나 만들어짐(커넥션처럼)
- 서블릿 → jsession-id
- 브라우저가 닫히기 전까지 정보가 디스크에 유지됨
- 세션 id마다 할당된 스토리지
- 중요 정보는 넣지 않는다.
- mid(my id) - 클라이언트에 세팅 ← 이것과 뭔가 더 조합
- 쿠키를 탈취하더라도 안전하도록
- 로컬 스토리지 - 쿠키와 비슷한 애. 로컬 디스크에 저장, 아무나 볼 수 있음.
- 브라우저 내 파일에 저장
- 세션 스토리지 - 요청을 하면 세션이 하나 만들어짐(커넥션처럼)
- 인증(Authentication)은 이 사람이 그 사람이 맞냐
- 인가(Authorization)는 이 사람이 적법한 권한을 갖고 있는 유저인가.
- 이 url에 보낼 수 있는가
- 진짜 클라이언트 ip는 X-Forward-For로 알아냄
- 특정 ip나 대역만 서버를 사용할 수 있도록
- ex) 가맹점 외 ip 대역은 통과 시키지 못하도록 사전 차단
- 중간에 프록시가 껴있으면 검사가 안됨
- pc용 api, 모바일용 api 등 구분 가능
- 어떤 화면으로부터 api가 호출되었는지
- user의 로그인한 키 세팅
- 인증값, 보안적으로 필요, 일시적으로 저장해야하는 것들
- 나 아닌 다른 유저가 세션 쿠키를 볼 수 없음.
- 처리상태, user의 상태 정보 등을 저장
- secure 속성 설정
- 안팎으로 제한된
- CORS(Cross Origin Resource Sharing) : 어떤 도메인끼리는 CORS로 묶여있는
'HTTP' 카테고리의 다른 글
HTTP 완벽 가이드 (13) (0) | 2025.03.15 |
---|---|
HTTP 완벽 가이드 (12) (0) | 2025.03.15 |
HTTP 완벽 가이드 스터디 (10) (0) | 2025.03.15 |
HTTP 완벽 가이드 스터디 (9) (0) | 2025.03.10 |
HTTP 완벽 가이드 스터디 (8) (0) | 2025.03.06 |