어웅 내일 출근하자마자 url 부터 parse 한다;
1. 입력정보에 대한 보안
url 을 그냥 사용하게 되면 엔드포인트가 어떻든간에
'../passoword.js' 를 url에 써서 서버 컴퓨터의 디렉토리 정보를 탐색할 수 있다.
path.parse('../passoword.js'); 를 하게 되면
{ root: '',
dir: '..',
base: 'password.js',
ext: '.js',
name: 'password' }
이렇게 객체 형태로 url을 리턴해주는데,
그러면 디렉토리 정보값('..') 을 제외하고 엔드포인트만 취해서외부 침입을 막을 수 있다.
즉, 사용자로부터 경로가 들어오는 모든 곳을 parse 로 바꿔줘야 한다.
외부 정보가 유입되거나 유출되는 모든 경우 오염될 수 있으므로 철저히 의심해야 한다.
var path = require('path');
var filteredId = path.parse(queryData.id).base;
// 파일 내용 읽기
fs.readFile(`data/${filteredId}`, 'utf-8', function (err, description) {
...
}
filteredId = path.parse(id).base;
// 파일 삭제
fs.unlink(`data/${filteredId}`, function(error){
response.writeHead(302, {Location: `/`});
response.end();
});
2. 출력정보에 대한 보안
(XSS) 공격자가 html 코드를 심어 자바스크립트가 인식하게 만듦.
1. 스크립트 코드임이 인식되면 아예 지워버리기
-- npm sanitize-html : <script> 태그같은 영향력있는 태그를 아예 지워버림
2. 스크립트 코드 자체를 그대로 보여주기 (html entity)
var sanitizeHtml = require('sanitize-html');
var sanitizedTitle = sanitizeHtml(title);
var sanitizedDescription = sanitizeHtml(description, {
allowedTags: ['h1']
});