본문 바로가기

Advance I/Node.js

22.01.31

JavaScript에서 함수는 구문(statement)이면서 동시에 값(value)이기도 하다. 이런 특성을 이용하면 서로 연관된 데이터(변수)와 처리(함수)를 그룹핑해서 정리 정돈할 수 있다.

 

값으로써의 함수의 활용

함수를 배열과 객체(value)에 담을 수 있다.

JavaScript에서는 함수의 오버 로딩을 허용하지 않으므로 같은 이름의 함수가 정의되어도 에러가 발생하지 않고 마지막 함수만 유효하다. 따라서 하나의 함수로 여러 매개변수에 대응할 수 있는 분기를 설계해야 한다.

*함수 내부에서 넘겨받은 arguments 개수나 type으로 구분하여 다른 동작을 취하도록

 

같은 맥락에서 객체의 프로퍼티로써 함수를 정의하면 함수가 오버라이팅 되는 위험을 줄일 수 있다. (복잡성↓)

객체 안에서 데이터와 데이터를 처리하는 함수가 그룹핑되어있기 때문이다.

 

 

객체 내 프로퍼티 간 참조

객체 내에서는 프로퍼티 키를 통해 값을 참조할 수 있다.

전역 변수를 사용하는 함수처럼 보인다.

 

 

 


Module

객체를 정리하는 도구

모듈화를 통해 정보 은닉과 코드 재사용이 용이하게 한다.

 

module exports (mpart.js)

module.exports = 외부에서 사용을 허용할 객체;

*일종의 public 객체화

 

module use (muse.js)

require(module path);

./ :  현재 코드가 실행되는 디렉토리

 

 

 


Security

INPUT : 오염된 정보가 들어올 때

사용자로부터 받아온 데이터(예를 들어 query string)를 그대로 받아 파일을 탐색하는 처리를 하면 약간의 조작만으로 서버의 상위 디렉터리의 데이터마저 탐색할 수 있다.

/?id=password    =>     /?id=../password    =>     /?id=.../password

 

따라서 사용자로부터 받은 데이터를 가공하여 사용할 필요가 있다.

var path = require('path');

path.parce()

parce를 통해 필요한 부분만 추출하여 개발자가 원하는 장소에서만 사용자의 접근을 한정한다.

 

 

 

OUTPUT :  오염된 정보가 나갈 때

공격자가 서버로 보내는 데이터에 JavaScript 코드를 심어서 다른 사용자에게도 해당 코드의 결과가 반영되는 문제

ex. <script> ... </script>    //웹 브라우저가 JavaScript 코드로 인식한다.

 

 

filtering 원리 (수동)

JavaScript 파일 속 Entity Name은 웹 브라우저가 Result 문자로 출력한다.

npm을 통해 자동 필터링 모듈을 다운로드한다.

npm init    //npm 초기화

npm install -s sanitize-html

*-g or --global : 컴퓨터 전역에서 사용할 수 있는 독립된 프로그램 설치

*-s : 현재 프로젝트에서만 사용할 프로그램 설치

 

'sanitize-html' 모듈 설치 후 생긴 package.json

dependencies는 사용하고 있는 외부 소프트웨어를 나타낸다.

 

'sanitize-html' document

해당 모듈의 document를 참고하여 데이터를 필터링한다.

허용하고 싶은 html tag 옵션 ('h1' 허용)

 

'Advance I > Node.js' 카테고리의 다른 글

22.01.30  (0) 2022.01.30
22.01.29  (0) 2022.01.29
22.01.25  (0) 2022.01.25
22.01.23  (0) 2022.01.23
22.01.21  (0) 2022.01.21