: 하나의 키를 사용해서 데이터를 암호화(Encryption)하고 똑같은 키를 사용해서 복호화(Decryption)하는 방식
: 키를 안전하게 공유하는 것이 매우 중요
: 속도가 비대칭키보다 훨씬 빠름
: AES, DES, 3DES 같은 알고리즘이 대표적인 예시
: 키가 노출되면 암호화된 데이터도 쉽게 복호화할 수 있음
: 멀리 떨어진 상대에게 키를 안전하게 전달하는 게 어려움
: 서로 다른 키를 사용 - 공개키 (Public Key)와 개인키 (Private Key)
: 공개키로 암호화하고 개인키로 복호화하거나 개인키로 서명하고 공개키로 검증
: 이름처럼 공개키는 누구에게나 공개해도 되지만 개인키는 본인만 비밀로 보관해야 함
: 키를 따로 전달할 필요가 없기 때문에 키 배포가 쉬움
: RSA, DSA, ECC 같은 알고리즘이 대표적인 예시
: 대칭키보다 처리 속도가 느림
CSRF(Cross-Site Request Forgery, 사이트 간 요청 위조)는 사용자가 로그인한 인증 상태를 악용해서 원하지 않는 요청을 보내는 공격이다.
브라우저는 쿠키를 자동으로 보내기 때문에 사용자가 직접 요청을 보낸 게 아니어도 세션 쿠키가 같이 전송돼서 서버는 정상 요청으로 착각할 수 있다.
CSRF 토큰 사용 : 서버가 폼에 랜덤한 토큰을 심어주고 요청할 때 토큰을 같이 보내게 하고 이 토큰을 확인해서 요청이 진짜 사용자인지 판단.
Referer 체크 : 요청 보낸 출처를 확인해서 신뢰할 수 없는 출처는 거부.
SameSite 쿠키 속성 설정 : 쿠키가 크로스 사이트 요청에 자동으로 안 붙도록 설정.
CORS (Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는 다른 출처(도메인/포트/프로토콜)끼리 요청을 보내고 받는 걸 제어하는 보안정책으로 기본적으로 웹브라우저는 출처가 다르면 요청을 차단(Same-Origin Policy)한다. 함부로 다른 사이트에 요청해서 민감한 데이터를 가져오는 걸 막기 위해서이다.
CORS를 허용하기 위해선 서버 응답에 아래와 같은 헤더를 달아야 한다.
Access-Control-Allow-Origin: [허용할 출처]