일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 맥북 유용한 앱
- jsx 문법
- 자바 기술면접
- React props
- react state
- react jsx
- Express middleware
- 자바 개발자
- 맥북 초보
- 맥북 사용법
- Java tech interview
- tech interview
- 알고리즘
- 백준 단계별로 풀어보기
- mysql
- 자바 인터뷰
- 아톰에디터
- 자바 면접
- node.js
- Node.js Express
- 자바 영어면접
- AtomEditor
- 백준 알고리즘
- 생활코딩
- 기술면접
- 맥북 필수 앱
- 리액트
- 맥북 팁
- 백준
- React
- Today
- Total
song.log
[Node.js] 모듈의 형식&제작, 입력 정보/출력 정보에 대한보안 본문
1. 모듈의 형식
모듈은 그룹핑의 가장 큰 형태라고 볼 수 있음
모듈이 될 파일에 객체 하나를 작성
이 때, module.exports = '객체' 를 통해 다른 파일에서도 접근이 가능하도록 함
var M = {
v: 'v',
f: function(){
console.log(this.v);
}
};
module.exports = M;
이 객체에 접근하고자 하는 파일에서 require()를 통해 객체를 받아옴
같은 폴더 안에 있는 파일이기에 ./를 붙여서 가져오기
console.log('객체'); 를 통해 객체 안에 무엇이 있는지 확인할 수 있다.
var M = require('./mpart.js');
console.log(M);
M.f();
2. 모듈의 제작
제작했던 main.js app 에서 template 객체를 가지고 모듈화 하기
var template = {
HTML:function(title, list, body, control){
return `
<!doctype html>
<html>
<head>
<title>WEB1 - ${title}</title>
<meta charset="utf-8">
</head>
<body>
<h1><a href="/">WEB2</a></h1>
${list}
${control}
${body}
</body>
</html>
`;
},
list: function(filelist){
var list = '<ul>';
var i = 0;
while(i < filelist.length){
list = list + `<a href='/?id=${filelist[i]}'><li>${filelist[i]}</li></a>`;
i = i+1;
}
list = list + "</ul>";
return list;
}
}
module.exports = template;
main.js에 이 것만 추가.
var template = require('../lib/template.js');
3. 입력한 정보에 대한 보안
입력 정보가 들어있는 경로를 사용자들에게 보이지 않게 하기 위해, path.parse().base를 사용
경로를 탐색할 수 있는 내용을 세탁할 수 있다.
var filteredId = path.parse(queryData.id).base;
fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
3. 출력 정보에 대한 보안
html의 script태그 이용해서 다른 사이트로 이동하게 하거나, alert창을 띄우게 하는 나쁜 입력을 받았을 경우,
이런식으로 문제가 생길 수 있다.
npm sanitize-html을 검색하고 npm 공식 사이트에서 다운로드 수를 체크하고 다운 받을 것
윈도우키 + r > cmd 실행창 > npm init을 입력하면 우리의 npm을 package로 관리
package.json을 보면 어떠한 외부소프트웨어에 의존하고 있는지를 확인할 수 있다.
다운로드한 npm sanitize-html을 활용
var sanitizeHtml = require('sanitize-html');
sanitizeHtml('필터하기 위한 존재', {허용하는 태그:[]});
fs.readdir('./data', function(err, filelist){
var filteredId = path.parse(queryData.id).base;
fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
var title = queryData.id;
var sanitizedTitle = sanitizeHtml(title);
var sanitizedDescription = sanitizeHtml(description,{
allowedTags:['h1']
});
var list = template.list(filelist);
var html = template.HTML(title, list,
`<h2>${sanitizedTitle}</h2><p>${sanitizedDescription}</p>`,
`<a href="/create">create</a> <a href="/update?id=${sanitizedTitle}">update</a>
<form action="/delete_process" method="post">
<input type="hidden" name="id" value="${sanitizedTitle}">
<input type="submit" value="delete">
</form>
`);
※ node.js awesome 이라고 검색하면 node.js의 유용한 module을 북마크한 것들을 찾아 볼 수 있다.
참조한 생활코딩 URL :
https://opentutorials.org/module/3549/21148
https://opentutorials.org/module/3549/21149
https://opentutorials.org/module/3549/21150
https://opentutorials.org/module/3549/21151
'DevLog > Node.js' 카테고리의 다른 글
[Node.js] Express 미들웨어 사용 : body-parser, compression (0) | 2019.12.23 |
---|---|
[Node.js] Express의 hello world, Route Parameter, 홈페이지 구현, 페이지 생성, 수정, 삭제 기능 구현 (0) | 2019.12.23 |
[Node.js] 글생성, 글수정, 글삭제 : post방식으로 전송된 데이터 받기, Redirection, 객체를 이용해서 템플릿 기능 정리 정돈하기 (0) | 2019.12.21 |
[Node.js] 동기/비동기, 콜백함수, 패키지 매니저와 PM2 사용법 (0) | 2019.12.19 |
[Node.js] 파일목록 알아내기, 글 목록 출력하기, 함수를 이용해서 정리 정돈하기 (0) | 2019.12.19 |