XSS (Cross-Site Scripting 크로스 사이트 스크립팅) 은 사용자가 입력할 수 있는 폼이나
URL의 파라미터 값을 통해 악의적인 코드를 삽입하여
쿠키를 갈취하거나 악성 코드를 실행하는 것을 말합니다.
사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다.
주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다.
이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타난다.
이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나, 자동으로 비정상적인 기능을 수행하게 하거나 할 수 있다.
주로 다른 웹사이트와 정보를 교환하는 식으로 작동하므로 사이트 간 스크립팅이라고 한다.사이트 간 스크립팅 - Wikipedia
기본적으로 이는 태그, 특히 스크립트 태그를 통해 삽입되어 지는데요.
태그를 여는 <
를 <
로 >
를 >
로 표현함으로써
브라우저가 진짜 태그가 아닌 문자 형태의 <
와 >
로 인식하게 할 수 있습니다.
이 방법으로 XSS 필터링을 해줄 수 있습니다.
function XSSFilter(content) {
return content.replace(/</g, "<").replace(/>/g, ">");
}
기본 원리는 이와 같이 실제 태그가 아닌 문자로 변경해줌으로써 태그나 코드를 주입 못하게 하는 것인데요.
사실 저 2개만으로는 XSS 공격을 제대로 막기에는 좀 부족합니다.
실제로 좀 더 확실한 방법으로 필터링 하고자 한다면 기존에 있는 오픈소스를 이용하는 것이 좋습니다.
여기서 저는 js-xss 라는 오픈소스를 선택하였습니다.
GitHub: https://github.com/leizongmin/js-xss
Browser
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-xss/0.3.3/xss.min.js"></script>
<script>
var html = filterXSS('<script>alert("xss");</scr' + 'ipt>');
alert(html);
</script>
Node.js
var xss = require('xss');
var html = xss('<script>alert("xss");</script>');
console.log(html);
Node.js 의 장점이 Front-end와 Back-end 언어가 같다는 점을 생각하면
이 코드는 HTML + CSS + JavaScript 또는 Node.js 양쪽 모두에서 동일하게 사용할 수 있습니다.
참고블로그 : https://steemkr.com/technology/@inspiredjw/node-js-xss
'개발 > Node.JS' 카테고리의 다른 글
노드를 더 우아하게. pm2 이야기 (0) | 2018.04.05 |
---|---|
Node.js + MySQL 예제 : GigaBytes of Data를 100으로 처리 (0) | 2018.03.11 |
설문 조사 : Node.js 개발자가 디버깅 및 다운 타임 (0) | 2018.03.11 |
TypeScript 를 사용하여 Node.js 응용 프로그램 만들기 (0) | 2018.03.11 |
Prometheus로 Node.js 성능 모니터링 (0) | 2018.03.11 |