2021-04-03(Sat)

항목

내용

학습 날짜

2021-04-03(토)

학습 시간

11:00~23:00

학습 범위 및 주제

node.js, express.js

학습 목표

qr-checkin 코드를 분석할 수 있도록 학습한다.

동료 학습 방법

-

상세 학습 내용

SOP(Same Origin Policy)란?

한 origin으로부터 로드된 document 또는 script가 다른 origin의 리소스와 상호작용 할 수 있는 방법을 제한하는 중요한 보안 메커니즘이다.

  • 브라우저가 document를 받을 때는 그 document의 출처를 origin이라는 이름으로 저장해둔다.

  • 그런데 이 때 document 내에서 외부리소스들과 상호작용 할 때 최초 파악한 origin과 다르다면, 별도의 제한을 두게 되는 것이다.

  • 이 origin을 파악할 때는 scheme, Host, Port만 보고서 판단하게 된다. https://www.example.com:443/path/page.html 이 origin이라고 치면, scheme(https)과 Host(www.example.com)와 port(443)이 동일한 URL을 same origin으로 판별하게 되는 것이다. 이 때 port는 생략되어있을 때 scheme에 할당되는 포트번호를 기본으로 판별하게 된다.

왜 SOP가 중요할까?

해커가 악의적인 코드를 넣은 사이트를 유저가 열어버린 시나리오를 생각해보자.

  1. 만약 유저가 gmail 등에 접속해둔 상태라면 쿠키가 살아있을 것이고, 해커는 '악의적인 코드'를 통해 이 쿠키를 자동으로 첨부하여 구글 메일 서버에 유저의 메일 정보를 요청할 수 있다.

  2. 구글 메일 서버는 쿠키만 확인하고 메일 정보를 응답한다.

  3. 이제 SOP 유무에 따라 해커에게 메일정보가 넘어가는지 유무가 결정된다.

    • SOP가 없다면? 메일 정보가 그대로 해커에게 넘어간다.

    • SOP가 있다면? origin이 gmail이 아니라 해커의 사이트이므로 CORS 정책에 의해 메일 정보 read가 불가하다. 해커는 정보를 읽을 수 없다!

Cross-origin Network Access를 허용하는 방법

Cross-origin간의 통신이 필요한 경우는?

  • JSONP

    • NO!

    • 모든 origin 대상으로 SOP를 무력화

  • CORS

    • YES!

    • 허용할 origin만을 Access-Control-Allow-Origin에 명시적으로 추가

express 프레임워크에서의 미들웨어

미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트(res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수에 대한 액세스 권한을 갖는 함수이다. 그 다음의 미들웨어 함수는 일반적으로 next라는이름의 변수로 표시된다.

  • 미들웨어(Middleware)란 요청과 응답 중간에 거쳐가는 함수로, 어떠한 동작을 하거나, 오류를 걸러내기도 한다. Express에서는 사실상 모든 것이 미들웨어이다.

  • 현재의 미들웨어 함수가 요청-응답 주기를 종료하지 않는 경우에는 next() 를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야 한다. 그렇지 않으면 해당 요청은 정지된 채로 방치된다.

  • app.use() 메서드를 사용하며, 인자로 미들웨어 함수를 넣으면 된다.

  • 미들웨어의 경우, 동기적으로 작성 순서대로 실행되므로, 순서를 주의해서 작성해 주어야한다.

주요 미들웨어

  • body parser

  • express-session

참고

JWT vs Session 로그인 상태관리

https://stackoverflow.com/questions/43452896/authentication-jwt-usage-vs-session

https://namunotebook.tistory.com/14

학습 내용에 대한 개인적인 총평

쌩뚱맞게 node & express 학습을 시작했다. spring도 넘 재밌게 하고 있었긴한데, QRcheckin에 이벤트 테이블을 붙여보고 싶어져서..ㅎㅎ;

다른 것보다 실제로 사용되는 서비스를 만들고 싶다는 갈증이 너무 커진 상태이다. 무엇보다 사람들이 많이 쓰는 코드를 작성하고 싶다. cub3d tester도 사람들이 많이 써주니까 즐겁더라. 마침 관심있었던 것들이 모여있다.

  • node

  • QR코드

  • 상용 서비스에 테이블 붙이기

사실 나를 제한하는건 나 밖에 없다. 놀 시간에 node & express 공부해보자, 그냥 잠을 덜 자면 되지 뭐ㅎㅎ :)

flow는 아래와 같이 할 것이다.

  1. node 기초 학습 (완료)

  2. QR 코드 리더기 뜯어보기 (진행 중)

  3. 테이블 붙이기

  4. 붙인 테이블에 이벤트 입력하는 어드민 페이지 개발

다음 학습 계획

  • QR 코드 리더기에 테이블 붙이기

Last updated