1. express를 이용한 폼 처리
- 폼처리에 GET을 사용하면 필드는 req.query에 들어간다.
- 예를 들어 name 속성이 email인 필드를 사용하면 그 값은 핸들러에 req.query.email로 전달된다.
- POST를 사용한다면, URL로 인코드된 바디를 분석하는 미들웨어가 필요하다.
- npm i body-parser 을 터미널에 적어 body-parser 라이브러리를 설치한다.
- express 4.16 부터 body-parser 를 내장하였다. 이젠 설치할 필요 없다.
그래서 별거 없다. 프론트에서 req.body에 json데이터를 담아서 보내면 그냥 그걸 가져다 사용하면 된다.
다음은 AppSam 프로젝트의 한 예시이다.
2. post요청 form 처리의 예시
- req.body.id 를 가져와서 데이터베이스에 있는지 검사하고
- req.body.ps 를 가져와서 bcrypt로 디코딩한 결과를 db의 암호화된 ps와 비교하고
- 맞으면 userData 를 이용해서 jwt를 만든 후에
- res.status(200).send({그 데이터들}) 로 보내준다.
- 오류가 나면 catch문으로 throw한다.
- 에러의 종류에 따라 res.status(code).send()를 통해 클라이언트에게 에러의 의미를 알려준다.
- module.exports = signIn; 으로 엔드포인트를 export 해준다
- 라우터 파일에서 const signIn = require('signIn.js') 로 import 해준다. (Common JS)
- 처음에 적었던 json 세팅과 body-parser 세팅 아래에 app.post('/주소', signIn) 해준다.
3. router 구성
4. CSRF (Cross-Site Request Forgery, 크로스 사이트 요청 위조)
- 웹 애플리케이션의 취약점을 이용한 공격 방법입니다.
- CSRF 공격은 인증된 사용자가 자신의 의도와는 무관하게 공격자가 조작한 요청을 서버에 전송하게 하는 것을 목적으로 합니다.
CSRF 공격을 방어하기 위한 방법들:
- CSRF 토큰 사용: 서버는 폼을 렌더링할 때 랜덤한 문자열(토큰)을 생성하고, 이를 사용자 세션에 저장합니다. 클라이언트는 폼 제출 시 이 토큰을 함께 전송해야 합니다. 서버는 요청을 처리하기 전에 세션에 저장된 토큰과 전송받은 토큰을 비교하여 일치하지 않으면 요청을 거부합니다.
- SameSite 쿠키 속성: 쿠키에 SameSite 속성을 설정하여, 브라우저가 다른 사이트에서 요청을 보낼 때 해당 쿠키를 전송하지 못하게 합니다. 이렇게 하면 공격자가 사용자의 쿠키를 이용해 요청을 위조하는 것을 방지할 수 있습니다.
- 요청에 사용자 인증 정보 추가: 민감한 작업에 대한 요청 시 추가적인 인증 정보(예: 패스워드)를 요구하여 공격자가 사용자의 인증 정보를 알 수 없기 때문에 요청을 위조할 수 없게 합니다.
- CORS 정책 적용: Cross-Origin Resource Sharing(CORS) 정책을 사용하여 다른 도메인에서 오는 요청을 허용할지 말지 결정할 수 있습니다. 이를 통해 공격자가 다른 도메인에서 위조된 요청을 보내는 것을 제한할 수 있습니다.
- 다음시간엔 CSRF 방어방법에 대해 자세히 아라보자.
'더이상 하지 않는 Backend - NodeJS > Node-Express 개론(완)' 카테고리의 다른 글
Node-Express 서버에서 CSRF 공격을 방어하는 방법 (0) | 2023.03.31 |
---|---|
[O'REILLY] Node & Express - 8장 : 폼 처리 - 3 (파일 업로드) (0) | 2023.03.31 |
[O'REILLY] Node & Express - 8장 : 폼 처리 (0) | 2023.03.26 |
[O'REILLY] Node & Express - 6장 : 응답 객체 - 2 (0) | 2023.03.26 |
[O'REILLY] Node & Express - 6장 : 응답 객체 (0) | 2023.03.24 |
댓글