본문 바로가기
더이상 하지 않는 Backend - NodeJS/Node-Express 개론(완)

[O'REILLY] Node & Express - 8장 : 폼 처리 - 2

by VictorMeredith 2023. 3. 30.

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 구성

api의 기능에 따라 2depth 라우터를 구성해서 index.js 라우터에서 통합해준다.

 

4. CSRF (Cross-Site Request Forgery, 크로스 사이트 요청 위조)

- 웹 애플리케이션의 취약점을 이용한 공격 방법입니다. 

- CSRF 공격은 인증된 사용자가 자신의 의도와는 무관하게 공격자가 조작한 요청을 서버에 전송하게 하는 것을 목적으로 합니다.


CSRF 공격을 방어하기 위한 방법들:

- CSRF 토큰 사용: 서버는 폼을 렌더링할 때 랜덤한 문자열(토큰)을 생성하고, 이를 사용자 세션에 저장합니다. 클라이언트는 폼 제출 시 이 토큰을 함께 전송해야 합니다. 서버는 요청을 처리하기 전에 세션에 저장된 토큰과 전송받은 토큰을 비교하여 일치하지 않으면 요청을 거부합니다.

- SameSite 쿠키 속성: 쿠키에 SameSite 속성을 설정하여, 브라우저가 다른 사이트에서 요청을 보낼 때 해당 쿠키를 전송하지 못하게 합니다. 이렇게 하면 공격자가 사용자의 쿠키를 이용해 요청을 위조하는 것을 방지할 수 있습니다.

- 요청에 사용자 인증 정보 추가: 민감한 작업에 대한 요청 시 추가적인 인증 정보(예: 패스워드)를 요구하여 공격자가 사용자의 인증 정보를 알 수 없기 때문에 요청을 위조할 수 없게 합니다.

- CORS 정책 적용: Cross-Origin Resource Sharing(CORS) 정책을 사용하여 다른 도메인에서 오는 요청을 허용할지 말지 결정할 수 있습니다. 이를 통해 공격자가 다른 도메인에서 위조된 요청을 보내는 것을 제한할 수 있습니다.

 

- 다음시간엔 CSRF 방어방법에 대해 자세히 아라보자.

댓글