TIL25: Browser Security Model

Charlie·2020년 11월 29일
0

Immersive Course TIL

목록 보기
25/39
post-thumbnail

CORS(Cross-Origin Resource Sharing)

  • 오늘날 대부분의 웹 페이지들은 CSS style sheet, 각종 images, 그리고 scripts files이 다양한 출처들로 부터 읽혀져 로딩이 됩니다.
  • 이 때 처음 전송되는 리소스의 도메인과는 다른 도메인으로부터 리소스가 요청될 경우 해당 리소스는 Cross-Origin HTTP Request에 의해 요청됩니다.
  • 그리고 이 cross-origin 요청이 안전한지, 어떤 컨텐트들을 취급하는지, 허용하는 메소드들은 어떤 것인지 등을 미리 파악하기 위해 실제 요청 전에 Preflight Request를 먼저 실행합니다.
  • Preflight Request를 발생시키는 Method는 "OPTIONS" 입니다.

CORS의 작동 원리(적용 전략)는 아래와 같습니다.

(1) 특정 클라이언트만 허용 : Access-Control-Allow-Origin
(2) 특정 메소드만 허용 : Access-Control-Allow-Methods
(3) 특정 헤더만 허용 : Access-Control-Allow-Headers
(4) OPTIONS 이후제한 시간만 허용 : Access-Control-Max-Age

덧붙이자면 아래의 세가지를 확인하여 모두 일치하면 Same Origin이라고 할 수 있습니다.

ex) https://www.example.com:443/ 또는 http://www.example.com:80/
(1) protocol 확인 : https:// 또는 http://
(2) domain 확인 : example.com
(3) port 확인 : 443 또는 80

XSS(Cross-Site Scripting)

  • 예를 들어 innerHTML이 사용될 경우 공격받게 됩니다.
  • Code Injection Attack라고 부르기도 합니다.
  • 클라이언트가 무조건 서버를 신뢰하기 때문에 발생된다고 볼 수 있습니다.
  • 보안이 약한 웹 어플리케이션에 대한 웹 기반 공격 형태입니다.
  • 이 공격의 희생자는 어플리케이션이 아니라 사용자 자신입니다.
  • 이 공격을 통해 해로운 컨텐츠는 JavaScript를 활용하여 전달됩니다.

XSS(또는 Code Injection) 공격에 대한 대표적인 방어 방법은 아래와 같습니다.
(1) textContent 사용
(2) Sanitizing
(이 velog의 text editor도 이미 sanitizing 기능을 갖고 있습니다. 그래서 불가피하게 아래과 같이 표현합니다.)

  • '<' : '&' + 'lt'
  • '>' : '&' + 'gt'
  • '&' : '&' + 'amp'
  • ' " ' : '&' + 'quot'
  • " ' " : '&' + '#x27'

CSRF(or XSRF, Cross-Site Request Forgery)

  • 예를 들어, 사용자가 자신의 인증정보를 가진 채 해커가 심어놓은 링크를 클릭하게 되면 그 인증 정보를 가로채어 해커가 사용자 대신 서버에 위조된 요청을 보내게 되는 형태입니다.
  • 서버가 클라이언트의 인증정보만 보고 무조건 신뢰하기 때문에 발생된다고 볼 수 있습니다.

대부분의 최신 브라우저는 기본적으로 XSS나 CSRF(XSRF)에 대하여 안전하지만, 그렇다고 모든 형태의 공격을 100% 막을 수 있는 것은 아니며, 여전히 위협은 존재합니다.

자료 출처: 코드스테이츠(CodeStates)

0개의 댓글