본문 바로가기

개발일기/Node.js 공부하기

(16)
Node.js 기초 공부를 마치며... 앞으로 더 공부할 것. Java Script - 심도 있게 DB - Node.js와 자주 쓰이는 db로는 MongoDB와 MySQL FrameWork - 보안, 인증 등 공통적인 요소를 미리 구현해 놓은 것 Node.js의 기본적인 모듈, API Node.js AWESOME 검색해보기 Node.js 문서에 있는 CJS와 ESM에 대해 알아보기
App - 출력정보에 대한 보안 & Node.js - npm 활용 XSS ( X Site Scripting) 웹 사이트 공격 기법. 웹 사이트에 html태그 를 이용하여 자바스크립트를 조작할 수 있다. ( 태그 안쪽에는 자바스크립트가 들어감 ) location.href = '~~~'; 를 사용해서 다른 사이트로 보내버릴 수도 있고, 사용자 로그인 정보 갈취 따라서, 사용자가 입력했던 데이터를 그대로 출력하는 것은 위험할 수 있다. XSS 방지 사용자로 부터 입력받은 정보를 외부로 출력할때는 그 정보에서 문제가 되는 부분들을 필터링 한다. 1. 태그로 되어 있는 부분을 다 지운다. 2. 태그가 태그로 인식되지 않고, 그 모양 그대로 보여줄 수 있게 한다. html entities >>> www.w3schools.com/html/html_entities.asp ** npm..
App - 입력 정보에 대한 보안 fs.readFile(`data/${title}`, 'utf8', (error, description) => { ... }); 위의 코드에서 title은 브라우저에서 쿼리스트링(get방식)으로 넘어오는 데이터 인데, 사용자가 직접 입력 가능하므로 title에 파일명이 아니라 경로를 입력할 수 있다. 만약 title이 '../password.js' 라는 경로로 입력되고, 그 경로에 데이터베이스 접속정보와 같은 중요한 정보들이 들어있다면 중요한 정보들이 그대로 브라우저에 노출되게 된다. 따라서 아래와 같은 방식으로 코드를 수정한다. var path = require('path'); var filteredId = path.parse(title).base; fs.readFile(`data/${filteredId..
App - 템플릿 기능 정리 정돈하기 (객체와 모듈 활용) *라이브러리 재사용 가능한 작은 조각의 로직들. 라이브러리라는 폴더 안에 모듈(js파일)을 넣을 것. 출처 App -객체를 이용해서 템플릿 기능 정리 정돈하기 opentutorials.org/course/3332/21147 App 제작 - 모듈의 활용 opentutorials.org/course/3332/21149
Node.js - 모듈의 형식 모듈 (module) 많은 객체, 많은 함수들을 정리할 수 있는 더 큰 틀 1. require 경로 mpart.js와 muse.js는 같은 폴더 내에 있기 때문에 require('./mpart.js')의 경로를 현재 디렉토리인 ./을 사용한다. 2. module.exports 하나의 js파일 내에서 여러개의 객체를 exports 할 수 없다. 테스트 결과 마지막 exports 된 것으로 모듈화 됨. 아래와 같이 사용하는 방법도 있다. 출처 Node.js - 모듈의 형식 opentutorials.org/course/3332/21148
OOP (Object Oriented Programming) - 객체 지향 프로그래밍 함수의 특징 처리방식을 가지고 있는 구문이면서, 동시에 값이 될 수 있다. (변수에 넣을 수 있다.) 데이터가 될 수 있기 때문에 배열과 객체에 담을 수 있다. 객체 서로 연관 된 데이터와 그 데이터를 처리하는 방법인 함수를 그룹핑해서 코드의 복잡성을 낮추는 수납상자. 객체 안의 값 하나하나를 property라고 한다. var f = function(){ console.log(1+1); console.log(1+2); } var a = [f]; a[0](); var o = { func:f } o.func(); 객체 안에 데이터로 들어있는 함수 내에서는 this라는 약속된 값을 통해서 그 함수가 속해 있는 객체를 참조 할 수 있다. var q = { v1:'v1', v2:'v2', f1:function (..
App - 글삭제 (delete) // main.js var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); var app = http.createServer(function(request,response){ var _url = request.url; var queryData = url.parse(_url, true).query; var pathname = url.parse(_url, true).pathname; var title = queryData.id; if(pathname === '/'){ if(title === undefined){ ... }else{ var readFolder = './..
App - 글수정 (update) // main.js var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); var app = http.createServer(function(request,response){ var _url = request.url; var queryData = url.parse(_url, true).query; var pathname = url.parse(_url, true).pathname; var title = queryData.id; if(pathname === '/'){ if(title === undefined){ ... }else{ var readFolder = './..