본문 바로가기

Back-End/Node.js

(103)
Node.js.48. API와 CreateServer API : Application Programming Interface 웹 애플리케이션은 Node.js가 가진 기능을 호출하여 동작하게 된다. fs.readFile에 대해 생각해보자. 이 함수는 누가 만들었을까? Node.js 개발자들이 만든 것이다. 이 함수가 어떻게 동작하는지 우리는 모른다. Node.js를 만든 개발자들은 Node.js를 이용하는 개발자들에게 파일을 읽을 때에는 readFile을 사용하라고 사용설명서를 통해 말한다. 즉, readFile 함수의 이름과, 파라미터, 리턴값은 이 함수를 만든 Node.js개발자들과 이 함수를 사용하는 Node.js를 이용하는 개발자들 사이의 약속된 조작장치이다. 이런 조작장치를 Interface라 한다. 우리는 interface인 readFile함수를 ..
Node.js.47.3.App제작-출력정보에 대한 보안 목표 sanitize-html 사용방법 sanitize-html Clean up user-submitted HTML, preserving whitelisted elements and whitelisted attributes on a per-element basis www.npmjs.com var sanitizeHtml = require('sanitize-html'); 외부 모듈을 불러온다. var dirty = 'some really tacky HTML'; var clean = sanitizeHtml(dirty); sanitizeHtml(dirty)를 통해 dirty했던 HTML이 clean해진다. 우리의 웹 애플리케이션에서는 description과 title을 sanitize해야 한다. var sani..
Node.js.47.2.App제작-출력정보에 대한 보안 목표 npm을 통해 다른 사람이 만든 모듈을 사용하여 보안 문제 해결하기 npm sanitize html sanitize-html Clean up user-submitted HTML, preserving whitelisted elements and whitelisted attributes on a per-element basis www.npmjs.com npm init : 우리의 웹 애플리케이션을 npm으로 관리하기 위한 절차가 시작됨 - package name: 그냥 enter 누르면 기본 디렉토리의 이름이 패키지의 이름이 된다. 그 외 모두 enter를 누른다. 그러면 package.json 파일이 생성된다. -g: global. 전역으로 설치 -S : 진행 중인 프로젝트에서 사용할 작은 부품으로 설..
Node.js.47.1.App제작-출력정보에 대한 보안 저번 시간: 오염된 정보가 들어오는 문제 이번 시간: 오염된 정보가 나가는 문제 목표 태그를 그대로 표현하여 문제 해결하기 (1) 문제 예시 1 XSS로 들어갈 때마다 경고창이 뜬다. 이를 page view source로 보면 script 태그가 들어가 있기 때문에 발생한다. 즉, 공격자가 자바스크립트 코드를 심어놓으면 방문자가 메롱 알림창을 보게 된다. (2) 문제 예시 2 이를 제출하게 되면 입력한 웹 브라우저로 이동하게 된다. 이 외에 사용자의 로그인 정보를 갈취한다던지, ... 많은 온라인 서비스들이 사용자들에게서부터 입력받은 정보를 바깥으로 출력할 때는 정보에서 문제가 될 수 있는 것들을 필터링하는 작업이 필요하다. 해결 방법 1. 사용자가 입력한 태그를 지운다. 2. 태그를 웹 브라우저 상에 ..
Node.js.46.App 제작-입력정보에 대한 보안 웹 애플리케이션의 보안 문제 사용자의 id와 password 정보를 담은 파일이 있다고 하자. //password.js module.exports = { id:'egoing', password:'111111' } ../ : 현재 디렉토리의 부모 디렉토리 ../password.js을 입력하게 되면 파일을 읽게 된다. 이를 view page source로 보면 우리가 만들었던 password.js가 화면에 출력되는 최악의 경우가 생긴다. 또한 ../을 덧붙이면 우리 컴퓨터를 모두 탐색할 수 있게 된다. 이 문제를 해결해보자. Google에 nodejs path parse 검색해보자. Path | Node.js v14.9.0 Documentation Path# Source Code: lib/path.js Th..
Node.js.45.App 제작 - 모듈의 활용 코드가 너무 기므로 외부 파일에 독립적으로 사용할만한 코드를 찾아보자. 목표 var template을 상부 코드처럼 바깥에서 모듈을 가져다 써보자! lib 폴더를 생성한다. 보통, 모듈을 모아 놓는 폴더를 library라는 뜻의 lib 문자로 많이 생성한다. 그리고 그 속에 template.js 파일을 생성하자. lib > template.js // var template = { module.exports = { html: function (title, list, control, body) { var template = ` WEB ${list} ${control} ${body} `; return template; }, list: function(filelist){ var list = ''; var i =..
Node.js.44.Node.js 모듈의형식 정리정돈 - 객체, 배열, 함수 이러한 객체를 또 더 큰 틀에 정리정돈할 수 있는 틀이 모듈이다. 객체들이 많아지면 또 객체를 정리정돈을 해야 할 필요가 있다. 모듈을 이용하면 파일로 쪼개서 외부로 독립시킬 수 있다. 모듈 사용하기 //nodejs폴더 > mpart.js var M = { v: 'v', f: function() { console.log(this.v); } } M.f();//v module.exports = M; mpart.js 파일 속에 우리가 만든 모듈이 담겨있는 모든 기능들 중에서, 객체 M을 모듈 바깥에서 사용할 수 있도록 수출하겠다는 의미. // nodejs 폴더 > module.js var mpart = require('./mpart.js'); console.log(mpart);..
Node.js.43.App제작-템플릿 기능 정리정돈하기 (Refactoring) ▶ 객체? 서로 연관된 데이터와, 그 데이터를 처리하는 방법인 함수를 그룹핑하여 코드의 복잡성을 낮추는 수납상자. 객체 활용하기 객체를 통해 함수들을 정리정돈해보자! -> 객체 template을 만들어 안에 templateList, templateHTML 함수를 넣기 이와 같이 결과는 같지만 코드를 정리하는 것을 Refactoring이라 한다. 이를 통해 코드를 더 유지보수하기 쉬우며 개선시키는 방향으로 나아가야만 한다! 전체 코드 var http = require('http'); var url = require('url'); var fs = require('fs'); var qs = require('qs'); var template = { html: function (title, list, contro..

반응형