게시물 HTML 블록 분리

This commit is contained in:
2026-06-26 15:23:19 +09:00
parent c77cf1032b
commit 8e3bf4a874
16 changed files with 233 additions and 101 deletions

View File

@@ -0,0 +1,35 @@
const DANGEROUS_TAG_NAMES = [
'script',
'iframe',
'object',
'embed',
'form',
'input',
'button',
'textarea',
'select',
'meta',
'link',
'base'
]
const dangerousTagPattern = new RegExp(`<\\s*(${DANGEROUS_TAG_NAMES.join('|')})\\b[\\s\\S]*?<\\s*\\/\\s*\\1\\s*>`, 'gi')
const dangerousSingleTagPattern = new RegExp(`<\\s*(${DANGEROUS_TAG_NAMES.join('|')})\\b[^>]*\\/?>`, 'gi')
/**
* 본문 HTML 블록에서 실행성 코드와 위험 속성을 제거한다.
* @param {string} value - 원본 HTML
* @returns {string} 정리된 HTML
*/
export const sanitizeHtmlBlock = (value) => String(value || '')
.replace(dangerousTagPattern, '')
.replace(dangerousSingleTagPattern, '')
.replace(/\s+on[a-z]+\s*=\s*"[^"]*"/gi, '')
.replace(/\s+on[a-z]+\s*=\s*'[^']*'/gi, '')
.replace(/\s+on[a-z]+\s*=\s*[^\s>]+/gi, '')
.replace(/\s+(href|src)\s*=\s*"javascript:[^"]*"/gi, '')
.replace(/\s+(href|src)\s*=\s*'javascript:[^']*'/gi, '')
.replace(/\s+(href|src)\s*=\s*javascript:[^\s>]+/gi, '')
.replace(/\s+style\s*=\s*"[^"]*expression\s*\([^"]*"/gi, '')
.replace(/\s+style\s*=\s*'[^']*expression\s*\([^']*'/gi, '')
.trim()