본문 바로가기

더이상 하지 않는 Backend - NodeJS35

Node-Express 서버에서 CSRF 공격을 방어하는 방법 안녕하세요! 오늘은 Node.js와 Express를 사용하여 구축한 서버에서 CSRF(Cross-Site Request Forgery) 공격을 방어하는 방법에 대해 설명하겠습니다. CSRF 공격은 웹 사이트의 사용자가 자신의 의도와는 무관하게 공격자가 원하는 작업을 수행하도록 만드는 보안 취약점입니다. 이 포스트에서는 CSRF 공격을 방어하는 방법 중 하나인 CSRF 토큰을 사용하는 방법을 소개하겠습니다. 먼저, 필요한 패키지를 설치해야 합니다. csurf 패키지를 사용하여 CSRF 공격을 방어할 수 있습니다. 패키지를 설치하려면 다음 명령어를 실행하세요. npm install csurf 이제 csurf 미들웨어를 사용하여 CSRF 토큰을 생성하고 검증하는 코드 예제를 살펴봅시다. - 위 코드에서는 cs.. 2023. 3. 31.
[O'REILLY] Node & Express - 8장 : 폼 처리 - 3 (파일 업로드) 1. 파일 업로드 - 멀티파트 폼 처리에 주로 쓰이는 패키지는 버스보이, 멀티파티, 포미더블, 멀터 등이 있다. (채신기술 모름) - 멀티파티와 멀터가 좋다고 하는데 뭐 사용자 나름이다. - 파일 업로드를 활성화하기 위해서는 반드시 enctype="multipart/form-data" 를 사용해야 한다. 예시 - accept 옵션을 통해 파일의 타입을 제한할 수 있다. (실제로 강제하는 것은 아니다) - 이제 서버에서 post요청을 처리해보자. - 멀티파티의 parse 메서드를 사용하여 요청 데이터를 데이터 필드와 파일로 분석한다. - 이 메서드는 파일을 서버의 임시 디렉터리에 저장하며, 그 정보를 files 배열로 반환한다. - 라우트 핸들러에 넘길 정보를 알게 되었으니, 라우트 핸들러를 작성한다. -.. 2023. 3. 31.
[O'REILLY] Node & Express - 8장 : 폼 처리 - 2 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.bo.. 2023. 3. 30.
[O'REILLY] Node & Express - 8장 : 폼 처리 7장이 왜 없냐면 템플릿에 관한 이야기이기 때문이다. 풀스택을 지향하는 2023을 살아가는 여러분들에게 Pug나 핸들바는 사치다 React Vue Angular같은 CSR-SPA 프레임워크나 NEXT,NUXT등의 SSR 프레임워크, 아니면 그냥 퓨어한 html css js 랑 연결해서 날것의 코딩을 하는 것이 100만배는 도움이 될 것이다. 그래서 8장의 폼처리로 바로 간다. 1. 클라이언트 데이터를 서버에 전송하기 - 데이터를 서버에 보내는 방법은 쿼리스트링을 사용하는 방법과 요청 바디에 담아서 보내는 두 가지 방법이 있다. - 일반적으로 GET요청 시에 조건이 필요할 경우에는 쿼리스트링을 이용하고, 다른 요청에는 바디를 사용한다. - GET요청은 말 그대로 맞는 데이터를 가져오는 건데, 다른 메소드를.. 2023. 3. 26.
[O'REILLY] Node & Express - 6장 : 응답 객체 - 2 1. API 제공 - API를 제공할 때는 폼 처리와 비슷하게 매개변수는 보통 req.query에 들어있지만, req.body 역시 사용 가능하다. - API에서 다른 점은, PUT, POST, DELETE 등의 HTTP 메서드를 자주 사용한다는 점이다. - '엔드포인트' 라는 용어는 주로 API에서 함수를 가리킬 경우 주로 사용한다. 2. 간단한 예제 - GET요청 - PUT 요청 - DELETE 요청 (원래 이런 식으로 한다) 2023. 3. 26.
[O'REILLY] Node & Express - 6장 : 응답 객체 1. 응답 객체 - 응답객체는 노드의 핵심 객체인 http.ServerResponse의 인스턴스이다. - 보동 res를 사용한다 res.status(code) - HTTP 상태 코드를 설정한다. - 기본값은 200이며, 200 이외의 상태 코드를 반환할 경우에만 사용하면 된다. - 리디렉트의 상태코드는 301, 302, 303, 307 이지만, 이 메서드보다는 redirect 메서드를 쓰는 것이 좋다. - res.status(404).send('없어요') 처럼 체이닝이 가능하다. res.set(name, value) - 응답 헤더를 설정한다. - 여러가지 헤더를 한번에 설정할 수도 있다. 잘 안쓴다. res.cookie(name, value, [options]), res.clearCookie(name, .. 2023. 3. 24.
[O'REILLY] Node & Express - 6장 : 요청과 응답 객체 1. URL 프로토콜 - 요청을 어떻게 전송할지 결정한다. - http / https / file / ftp 등이 있다. 호스트 - 호스트는 서버이다. 로컬에 있는 서버는 한 단어 또는 숫자 형태의 IP 주소로 표현된다. - 인터넷에 있는 서버는 .com이나 .net 같은 최상위 도메인으로 끝난다. - 호스트 이름 앞에 서브도메인(www 등)이 있을 수 있다. 포트 - 각 서버에는 숫자 형태의 포트가 있다. 80, 443 같은 일부 포트 번호는 특별한 용도로 쓰인다. - HTTP에서는 80, HTTPS에서는 443이라고 간주한다. (포트 생략 시) - 일반적으로 3000, 8080, 8088 같이 기억하기 쉬운 포트 번호를 쓴다. 1023보다 큰 포트를 써야 한다. - 한 서버에서 포트 번호를 중복으로 .. 2023. 3. 20.
[O'REILLY] Node & Express - 5-2장 : JEST 실습해보기 1. 제스트 설치와 설정 - 제스트는 훌륭한 범용 테스트 프레임워크이다. - 다른 테스트프레임워크에는 모카, 재스민, 아바, 테이프 등이 있다. - 터미널에 설치한다. npm i --save-dev jest - 여기에서 --save-dev 는 개발 단계에서만 사용하는 패키지라는 뜻이다. - package.json 에 다음과 같이 test를 입력해준다. "scripts": { "test": "jest" }, - 이제 npm test로 실행할 수 있다. 아직은 테스트가 없으므로 오류가 일어난다. 2. 단위 테스트 - 단위 테스트의 핵심은 함수나 구성 요소를 고립시키는 것으로, 이 고립 작업의 테크닉인 '모형'에 대해 알아야 한다. - 모형: 1) 의존하는 패키지가 있으면 그 모형(시뮬레이션)을 만들어야 효율.. 2023. 3. 13.