-
[Node.js] 입출력 데이터의 보안 이슈생활코딩/WEBn 2020. 9. 18. 17:57
[강의 출처] opentutorials.org/course/3332/21150
입력정보 보안
데이터 저장 형태와 아래와 같다고 할 때,
directory /data /data1 /data2 /data3 /main.js /password.js
URL에 ?id=../password.js와 같은 쿼리스트링을 입력함으로써 해당 정보에 접근 가능하다.
fs.readFile(`data/${queryData.id}`, `utf8`, function(){});
이런 이슈를 방지하기 위해 path.parse(data).base 같은 필터를 이용해 위험할 수 있는 .. 키워드 등을 차단하는 것이 좋다.
출력정보 보안
유저가 입력한 데이터를 필터링 없이 출력하게되면 아래처럼 악성코드에 노출될 수 있다.
이 경우 <script> 태그로 인해 내부의 코드가 실행되어, 해당 데이터 페이지에 접근하면 'Attack'이라는 경고창이 출력된다.
그외에도 location.href를 이용해 유해 사이트로 리다이렉트하거나 유저의 로그인 정보를 유출하는 등의 공격이 가능해진다.
따라서 유저 입력 데이터에서 <script> 태그 비활성화 같은 조치가 필요하다. 예제에서는 아래 모듈을 사용했다.
www.npmjs.com/package/sanitize-html
var sanitizeHtml = require('sanitize-html'); var data = ` TEXT1 <script>alert('Attack')</script> TEXT2 <a href="https://www.google.com/">title</a> TEXT3 <h1>Heading</h1> TEXT4`; var sanitizedData = sanitizeHtml(data); console.log(sanitizedData); // TEXT1 TEXT2 title TEXT3 /* 웹브라우저로 html 파일을 로딩하면 title의 link는 정상 작동한다 * h1 태그는 텍스트만 남는다(헤딩 효과 적용X) * 위의 설정은 디폴트값으로, 설정을 변경하고 싶으면 인자로 객체를 넘겨서 허용 범위를 직접 지정할 수도 있다 */
'생활코딩 > WEBn' 카테고리의 다른 글
[OAuth2.0] OAuth2.0 개요 (0) 2020.09.30 [DNS] Domain Name System 개요 (0) 2020.09.28 [Node.js] 인코딩 - encodeURI(), charset=utf-8 (0) 2020.09.17 [Node.js] 비동기/동기(Sync)와 콜백, request (0) 2020.09.15 [HTML] form (0) 2020.09.14