728x90
1. HTTPS(Hyper Text Transfer Protocol Secure Socket layer)
기존 HTTP에 S(Secure)를 더해 보안을 한 것
- 암호화
제 3자가 서버와 클라이언트가 주고받는 정보를 탈취할 수 없도록 하는 것
- 인증서
서버의 신원을 보증하여 진짜 인증받은 사이트인지 아닌지 확인해주는 것
2. Hashing
알고리즘을 이용해 정보를 관리하는 과정
- 해싱의 특징
- 해시 값을 해독할 때에는 많은 시간이 걸려야하지만 해시 값을 만드는 데에는 오래걸리지 않아야 한다.
- 해시 값들은 최대한 다른 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가져야 한다.
- 문자열에 아주 작은 단위의 변경이 있더라도 반환되는 해시 값은 완전히 다른 값을 가져야 한다.
3. Cookie
서버에서 클라이언트에 데이터를 저장하는 방법중 하나
서버가 원하면 클라이언트에서 쿠키를 이용하여 데이터를 가지고 올 수 있다.
- 쿠키 옵션
- Domain : 서버에 접속할 수 있는 이름, 서버와 요청의 도메인이 일치하는 경우 쿠키 전송
- Path : 세부경로라고 하며 서버가 라우팅할 때 사용하는 경로, 서버와 요청의 세부경로가 일치하는 경우 쿠키 전송
- MaxAge or Expires : 쿠키의 유효기간을 정하는 옵션
- 세션 쿠키 : MaxAge나 Expires옵션이 없는 쿠키, 브라우저가 실행 중일때 사용할 수 있는 임시 쿠키. 브라우저를 종료하면 해당 쿠키는 삭제된다.
- 영속성 쿠키 : 브라우저의 종료 여부와 상관없이 MaxAge나 Expires에 지정된 유효시간만큼만 사용가능한 쿠키.
- Secure : 쿠키를 전송해야 할 때 사용하는 프로토콜에 따른 쿠키전송 여부를 결정(스크립트의 쿠키 접근 가능 여부 결정)
- HttpOnly : 브라우저의 쿠키에 접근 여부 결정(스크립트의 쿠키 접근 가능 여부 결정)
- SameSite : Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정(CORS 요총의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정)
- Lax : Cross-Origin 요청이면 'GET'메소드에 대해서만 쿠키를 전송할 수 있다.
- Strict : Cross-Origin이 아닌 same-siite인 경우에만 쿠키를 전송 할 수 있다.
- None : 항상 쿠키를 보내줄 수 있습니다. 다만 쿠키 옵션 중 Secure 옵션이 필요하다.
4. Session
사용자가 인증에 성공한 상태를 세션이라고 한다.
세션은 웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용하고 쿠키에는 서버에서 발급한 세션 아이디가 저장된다.
5. 웹 보안 공격
- SQL Injection
클라이언트가 넘겨준 정보를 그대로 SQL에 삽입하여 input FROM 부분에 일반 텍스트가 아닌 SQL문을 작성한다.
WHERE절에서 OR 은 AND보다 연산순위가 낮기 때문에 결국 로그인에 성공한다.
- SQL Injection 대응 방안
- 입력 요청값 검증 : SQL문은 사람이 사용하는 자연어와 비슷하기 때문에 키워드를 막는데에는 한계가 있다. 따라서 블랙리스트가 아닌 화이트 리스트방식으로 해당 키워드가 들어오면 다른 값으로 치환하여 SQL Injection에 대응할 수 있다.
※ 보안에서 화이트 리스트란?
: 기본청책이 모두 차단된 상태에서 예외적으로 접근이 가능한 대상을 지정하는 방식, 그 지정된 대상들을 말한다.
- Prepared Statement 구문 사용 : Prepared Statement 구문을 사용하면 사용자의 입력이 SQL문으로부터 분리되어 SQL Injection을 방어할 수 있다. 사용자의 입력 값이 전달 되기 전에 데이터베이스가 미리 컴파일하여 SQL을 바로 실행하지 않고 대기하며, 사용자의 입력값을 단순 텍스트로 인식한다. 따라서 입력 값이 SQL문이 아닌 단순 텍스트로 적용되며 공격에 실패하게 된다.
- Error Message 노출 금지 : 공격자는 데이터베이스의 Error Message를 통해 테이블이나 컬럼 등 데이터베이스의 정보를 얻을 수 있다. 에러가 발생한 SQL문과 에러 내용이 클라이언트에 노출되지 않도록 별도의 에러핸들링이 필요하다.
- Cross-Site Request Forgery(CSRF)
주소가 다른 웹사이트에서 요청을 조작하는 것
- CSRF 공격을 하기위한 조건
- 쿠키로 로그인을 한 경우 : 쿠키로 어떤 유저인지 알 수 있어야 한다.
- 예측할 수 있는 요청 / Parameter를 가지고 있어야 함 : request에 해커가 모를 수 있는 정보가 담겨있으면 안된다.
- CSRF 대응 방안
- CSRF 토큰 사용하기 : 서버측에서 CSRF 공격에 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 공개
- Same-Site Cookie 사용하기 : 같은 도메인에서만 세션 / 쿠키를 사용할 수 있다.
'JAVA > 인증&보안' 카테고리의 다른 글
[인증/보안] JWT TCP, CIA, RFC (0) | 2023.04.27 |
---|---|
[인증/보안] OAuth2 (0) | 2022.11.30 |
[인증/보안] JWT(JSON Web Token) (0) | 2022.11.30 |
[인증/보안] Spring Security (0) | 2022.11.30 |