nodejs express 프레임 워크 사용 시 필요했던 또는 유용했던 모듈들입니다.


1. helmet


  • 웹 서버 http header 설정 모듈

  • http header 설정을 적절히 해 웹 취약성으로부터 보호

  • http response header 들의 보안 관련 세팅을 위한 미들웨어 function

8가지 주요 기능

1. csp : Content-Security-Policy 해더

cross-site scripting attacks (사이트에 스크립트 코드를 삽입하는 공격기법)
cross-site injection(사이트에 쿼리를 통해 공격)를 막음

2. hidePoweredBy : X-Powered-By 해더를 숨김

X-Powered-By : 웹서버가 어떤 베이스를 가지고 돌아가고 있는지 보여주는 해더

3. hsts : Strict-Transport-Security 해더

Secure Connection(TLS/SSL) 으로 하게 함

4. ieNoOpen : X-Download-Options 해더

IE 유저들이 내 사이트 내용들 다운로드 실행을 못하게 하기 위함. (IE 8 이상)

5. noCache : Cache-Control, Pragma 해더

client-side caching을 disable시킴

6. noSniff : X-Content-Type-Options 해더

선언된 content-type에서 벗어난 MIME-sniffing(훔쳐보기)를 막음

7. frameguard : X-Frame-Options 해더

clickjacking 보호 를 제공한다.
**clickjacking : 감춰진 링크를 사용자가 클릭함으로써 의도되지 않은 행동을 수행하게 속이는 것 - 가짜 페이지에서 행동을 하게 만들 수 있음

8. xssFilter : X-XSS-Protection

cross-site scripting(사이트에 스크립트 코드/ 쿼리를 삽입하는 공격기법)을 하지 못하게 막는 필터



  • express-session vs cookie-session

  • express-session
    • 세션 데이터를 서버에 저장하는 미들웨어
    • 세션ID가 세션 데이터가 아닌 쿠키 자체에만 저장된다.
    • 기본값으로 in-memory storage 이고 production 환경을 위해 디자인되어 있지 않다.
    • scalable session store를 설정(set-up)하는 것이 필요.
    • https://github.com/expressjs/session#compatible-session-stores 참고!
  • cookie-session
    • cookie-backed storage가 구현된 미들웨어
    • 세션 키만 serialize하는 것이 아니라 전체 세션을 cookie에 serialize 한다. ( serialize(직렬화) : 메모리나 저장공간에 담을 수 있도록 직렬로 만드는 것)
    • 세션 데이터가 상대적으로 적거나 primitive values로 encode 되어 있을 경우에만! 사용.
    • 브라우저가 쿠키마다 4096 bytes를 제공하고 있을 지라도 limit를 넘고 있는 지 확실히 해야하며, 도메인마다는 4093 bytes를 넘겨서는 안된다. cookie data는 클라이언트에 보여지게 될 것이므로 보안상 이슈가 생기게 된다.


3. JWT 모듈 (토큰 베이스)


  • 인증, 정보교류 시 token으로 확인

  • 토큰 베이스 일 시 세션유지가 필요 없고 필요한 타이밍 때마다 토큰 유효, 인증 검증, 권한 확인만 필요해 짐

  • 자가 수용적 (self-contained) 방식으로 정보를 안정성 있게 전달

  • header/payload/signature 3부분으로 나뉘어짐

  • header : typ(토큰 타입), alg(해싱 알고리즘(HMAC SHA256 또는 RSA)가 사용, signature에서 토큰 검증 시 사용)

  • payload : 토큰에 담을 정보가 들어 있음. 1 piece = 1 claim, name : value 한 쌍

  • signature : header 인코딩 값과 payload 의 인코딩 값을 합친 후에 비밀키로 해쉬를 생성

    pseudo code 구조 : HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret key)


4. morgan (logger)


  • 로그 기록을 남겨주는 고마운 모듈


5. body-Parser


  • req.body가 bodyParser 사용 전에는 디폴트 값 Undefined로 설정되어 있음

  • 그러나 express v4.16.0이상 부터 빌트인이므로 혹~~시나 이전버전 사용하시는 분들은 체크해보시면 좋음


6. pm2 (프로세스 매니저)


  • 서버 인스턴스들에 대한 로드 밸런싱, 스케일 업 또는 스케일 다운을 도움

  • 프로세스들이 계속 실행할 수 있는 환경을 제공

  • nodejs를 하다보면 한번에 에러로 서버가 모두 다 터져버리는 경험을 하게 되는데, pm2에 인스턴스가 2개이상으로 유지하게 된다면 단일 인스턴스가 터져도 다른 인스턴스가 유지되게 만들 수 있음


7. passport.js


  • 인증 미들웨어

    passport-local : 쿠키-세션으로 인증
    passport-jwt : jwt 인증
    ... 등등 (passport-github)
    
  • 순서

    유저 모델 생성 -> passport 선언 -> passport-local, passport-jwt 설정 -> 사용 
    


참고 자료