sanitize-html

✒️ 2025-05-26 14:10 내용 수정


sanitize-html

XSS 공격을 막기 위한 패키지

npm install sanitize-html
const sanitizeHtml = require('sanitize-html');
const html = "<script>location.href = 'http://test.com/'</script>";

// sanitizeHtml을 적용하면 html의 <script> 부분이 제거된다
console.log(sanitizeHtml(html)); // location.href = 'http://test.com/'
const sanitizeHtml = require('sanitize-html');

// b, i, em, strong, a 태그와 a 태그의 href attribute를 허용
// Iframehost 허용도 가능하다
const clean = sanitizeHtml(dirty, {
	allowedTags: [ 'b', 'i', 'em', 'strong', 'a' ],
	allowedAttributes: {
		'a': [ 'href' ]
	},
	allowedIframeHostnames: ['www.youtube.com']
});
const sanitizeHtml = require('sanitize-html');

// 모든 태그와 attribute를 허용
const clean = sanitizeHtml(dirty, {
	allowedTags: false,
	allowedAttributes: false
});
// sanitize.js
const sanitizeHtml = require('sanitize-html');

// 문자열, 객체, 배열이 들어오면 sanitize(소독)을 진행하는 함수
const sanitizeObject = (obj) => {
    if (typeof obj === 'string') { // 문자열
        return sanitizeHtml(obj);
    } else if (Array.isArray(obj)) { // 배열 - Array.isArray()는 배열 확인 함수
        return obj.map(item=>sanitizeHtml(item));
    } else if (typeof obj === 'object' && obj !== null) { // 객체
        // 해당 객체의 모든 열거 가능한 properties를 순회
        for(let prop in obj) {
            if(obj.hasOwnProperty(prop)) { // 객체 자신의 속성만 검사
                obj[prop] = sanitizeHtml(obj[prop]);
            }
        }
    }
    return obj;
}

// sanitize middleware
exports.sanitizeMiddleware = (req, res, next) => {
    if (req.query) { // req.query sanitize
        req.query = sanitizeObject(req.query);
    }

    if (req.params) { // req.params sanitize
        req.params = sanitizeObject(req.params);
    }

    if (req.body) { // req.body sanitize
        req.body = sanitizeObject(req.body);
    }

    next();
}

sanitize 1.png

sanitize 2.png

sanitize 5.png

sanitize 6.png


req-sanitizer

req.body Object sanitize middleware

npm install --save req-sanitizer
const reqSanitizer = require('req-sanitizer');

// form 데이터 파싱
const bodyParser = require('body-parser');
const parseForm = bodyParser.urlencoded({extended: false});

// 다른 req 함수나 router 이전에 마운트해야 함
app.use(reqSanitizer());

req_sanitizer 1.png

req_sanitizer 2.png