1. 해싱(Hashing)
- 인증을 거치지 않고 단순하게 정보를 요청하고 응답한다면 누구나 접근이 가능하다
- 간단한 password를 이용하여 인증을 진행하는 방식은 위험성이 매우 높다
- DB가 타인으로부터 공격을 받아서 password가 노출된다면 클라이언트가 이용하고 있는 다른 애플리케이션까지 피해를 줄 수 있다
- 암호화(encryption)는 일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여, 해당 방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 '알고리즘'을 이용해 정보를 관리하는 과정이다
- 예를 들어 입력받은 문자열을 입력받은 숫자의 값 만큼 알파벳 순서를 건너뛴 문자로 변환하여 새로운 문자열을 반환하도록 한다
- 단순하고 간단하지만 암호화에 속한다
- 아래는 예제 코드이다
package CA.example;
public class Hashing {
public static String shiftBy(String content, int offset) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < content.length(); i++) {
char shiftByOffset = (char)(content.charAt(i) + offset);
result.append(shiftByOffset);
}
return result.toString();
}
public static void main(String[ ] args) {
shiftBy(content:"apple", offset: 2); //crrng 문자열 반환
shiftBy(content:"crrng", offset: -2); //apple 문자열 반환
}
}
2. 쿠키(cookie)
- 서버에서 클라이언트에 데이터를 저장하는 방법이다
- 서버는 클라이언트에게서 쿠키를 이용하여 데이터를 가져올 수 있다
- 서버가 클라이언트로부터 데이터를 가져오기 위해서는 특정 조건들을 만족해야 한다
- 쿠키의 특성을 이용하여 서버는 클라이언트에 인증정보를 담은 쿠키를 전송한다
- 클라이언트는 전송받은 쿠키를 이용하여 무상태성인 인터넷 연결을 안전하게 유지할 수 있다
- 쿠키는 오랜 시간 유지될 수 있고 자바스크립트에서 접근이 가능하므로 보안에 취약하다
1) 데이터를 가져오기 위한 쿠키 옵션
- 도메인(Domain)
- 쿠키에서 도메인은 도메인 이름만 포함한다
- 쿠키 옵션에서 도메인은 포트 및 서브 도메인 정보와 세부 경로를 포함하지 않는다
- 클라이언트의 쿠키 옵션에 도메인 정보가 존재하고 도메인 옵션과 서버의 도메인이 일치하면 쿠키를 전송한다
- 패스(Path)
- Path는 세부경로이며 서버가 라우팅할 때 사용하느경로이다
- 기본적으로 '/'으로 표시한다
- path 옵션은 /file.html로 설정되어 있다면 file.html/user/username의 경로라도 /file.html을 만족하므로 쿠키 전송이 가능하다 - MaxAge or Expires
- 쿠키가 유효한 기간을 설정하는 옵션이다
- 쿠키의 유효기간이 정해져 있지 않으면 탈취하기가 쉬워지므로 보안 측면에서 중요한 옵션이다
- maxAge는 몇 초 동안 유효할 지를 설정하는 옵션이다
- Expires는 클라이언트의 시간을 기준으로 유효한 날짜와 시간을 지정하는 옵션이다
: 지정한 날자와 시간을 초과하면 쿠키는 자동으로 삭제된다
- 세션 쿠키는 MaxAge나 Expires 옵션과 상관없이 크라우져가 실행 중에만 사용할 수 있는 쿠키이며, 브라우져가 종료되면 자동으로 삭제되는 쿠키이다
- 영속성 쿠키는 브라우져의 종료 여부와 관계없이 MaxAge와 Expires 옵션에 지정된 내용만큼 사용 가능한 쿠키이다 - Secure
- 쿠키를 전송할 때 프로토콜 옵션에 따라 전송 여부를 결정한다
- true로 옵션이 설정되어 있으면 HTTPS 포로토콜을 이용하는 경우에만 쿠키를 전송할 수 있다
- 옵션 설정이 없다면 HTTP와 HTTPS 모두 쿠키를 전송할 수 있다 - HttpOnly
- 자바스크립트에서 브라우져의 쿠키에 접근을 허용할 것인지를 결정한다
- true 옵션으로 설정되어 있으면 자바스크립트에서 쿠키에 접근이 불가하다
- 옵션 설정이 없는 경우에 기본적으로 false 값으로 지정된다
- false 값으로 지정되어 있으면 자바스크립트에서 쿠키에 접근이 가능하여 XSS 공격에 취약해 진다 - SameSite
- Cross-Origin 요청을 받은 경우에는 사용한 메서드와 해당 옵션(get,post,put,patch,...)의 조합에 따라 서버의 쿠키 전송 여부를결정한다
- 사용 가능한 옵션
→ Lax : Cross-Origin 요청이면 'GET'메서드에 대해서만 쿠키를 전송할 수 있다
→ Strict : Cross-Origin 요청이 아닌 same-site 경우에만 쿠키를 전송할 수 있다
→ None : 항상 쿠키를 전송할 수 있지만, Secure 옵션이 있는 경우에 한하여 전송한다
- same-site는 요청을 보낸 Origin과 서버의 Domain, Protocol, Port가 같은 경우를 의미한다
- 요청을 보낸 Origin과 서버의 Domain, Protocol, Port가 하나라도 다르면 Cross-Origin으로 구분한다
2) 쿠키 전송
- 서버에서 클라이언트로 쿠키를 처음 전송할 때에는 Header에 Set-Cookie 라는 프로퍼티에 쿠키를 담아 전송한다
- 이후 쿠키를 전송할 경우에는 클라이언트는 Header에 Cookie라는 프로퍼티에 쿠키를 담아 서버에 전송한다
3. Session
- 클라이언트가 인증에 성공한 상태를 Session이라고 한다
- 서버는 in-memory, 세션스토어(redis 같은 트랜젝션이 빠른 DB)에 세션을 저장한다
- 세션이 만들어지면 세션 id가 생성되고 인증된 클라이언트에게 전달된다
- 클라이언트는 서버에서 발급한 세션 아이디를 쿠키에 저장하고 사용한다
- 쿠키에 저장된 데이터는 보안에 취약하므로 사용이 종료되면 삭제해야 한다
- 서버가 클라이언트의 쿠키를 임의로 삭제할 수는 없지만, set-cookie로 클라이언트에게 쿠키를 전송할 때 세션 아이디의 키값을 무효한 값으로 갱신할 수 있다
※ 참조 링크
▶ 교차 출처 리소스 공유 (CORS) : https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
교차 출처 리소스 공유 (CORS) - HTTP | MDN
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라
developer.mozilla.org
▶ Same-origin Policy : https://en.wikipedia.org/wiki/Same-origin_policy
Same-origin policy - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search Security measure for client-side scripting In computing, the same-origin policy (sometimes abbreviated as SOP) is an important concept in the web application security model. Under the
en.wikipedia.org
▶사이트 간 요청 위조 : https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%9A%94%EC%B2%AD_%EC%9C%84%EC%A1%B0
사이트 간 요청 위조 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전.
ko.wikipedia.org
Set-Cookie - HTTP | MDN
The Set-Cookie HTTP response header is used to send a cookie from the server to the user agent, so that the user agent can send it back to the server later. To send multiple cookies, multiple Set-Cookie headers should be sent in the same response.
developer.mozilla.org
'인증 & 보안' 카테고리의 다른 글
Spring Security - 환경 구성 (0) | 2022.07.26 |
---|---|
웹 보안 공격 (0) | 2022.07.23 |
인증 - HTTPS (0) | 2022.07.21 |