@designofadecade/server 4.0.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
- HtmlSanitizer now supports preserving specific attributes on allowed tags via optional `allowedAttributes` parameter
|
|
12
|
+
- Enables granular control over which attributes are preserved on each tag
|
|
13
|
+
- Maintains all existing security features (event handler blocking, URL validation, etc.)
|
|
14
|
+
- Includes CSS style attribute validation with safe color property support
|
|
15
|
+
- Useful for preserving class names, data attributes, and inline styles for email rendering and compliance tracking
|
|
16
|
+
- Fully backward compatible - existing code continues to work without changes
|
|
17
|
+
|
|
18
|
+
## [4.1.0] - 2026-03-12
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- Improved CI/CD pipeline to use npm Trusted Publishing instead of tokens for enhanced security
|
|
22
|
+
- Moved deployment checklist to docs folder for better organization
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- Documentation for granular npm token setup (for reference)
|
|
26
|
+
- Enhanced HtmlSanitizer with additional security features:
|
|
27
|
+
- Never-Allow List for inherently dangerous tags (script, iframe, form, etc.)
|
|
28
|
+
- Multi-pass entity decoding to prevent nested encoding attacks
|
|
29
|
+
- Null byte protection to prevent string termination attacks
|
|
30
|
+
- Event handler removal to strip all event attributes
|
|
31
|
+
- External link security with auto-added target="_blank" rel="noopener noreferrer"
|
|
32
|
+
- Final security check to verify output before returning
|
|
33
|
+
|
|
10
34
|
## [4.0.0] - 2026-02-28
|
|
11
35
|
|
|
12
36
|
### Changed
|
|
@@ -6,14 +6,20 @@
|
|
|
6
6
|
* Security Features:
|
|
7
7
|
* - XSS Prevention: Blocks dangerous protocols (javascript:, data:, vbscript:, etc.)
|
|
8
8
|
* - DoS Protection: Enforces maximum input size limits
|
|
9
|
+
* - Never-Allow List: Blocks inherently dangerous tags (script, iframe, form, etc.)
|
|
10
|
+
* - Multi-Pass Entity Decoding: Prevents nested encoding attacks
|
|
11
|
+
* - Null Byte Protection: Removes string termination attack vectors
|
|
12
|
+
* - Event Handler Removal: Strips all event attributes (onclick, onerror, etc.)
|
|
9
13
|
* - Script/Style Removal: Completely removes script and style tags with content
|
|
10
14
|
* - HTML Comment Stripping: Removes comments that could hide malicious content
|
|
11
15
|
* - URL Validation: Validates and sanitizes URLs in anchor tags
|
|
16
|
+
* - External Link Security: Auto-adds target="_blank" rel="noopener noreferrer"
|
|
12
17
|
* - Entity Decoding: Safely decodes HTML entities with range validation
|
|
13
18
|
* - Attribute Escaping: Prevents attribute injection attacks
|
|
19
|
+
* - Final Security Check: Verifies output before returning
|
|
14
20
|
*
|
|
15
21
|
* @module HtmlSanitizer
|
|
16
|
-
* @version
|
|
22
|
+
* @version 3.0.0
|
|
17
23
|
*/
|
|
18
24
|
/**
|
|
19
25
|
* Result type for sanitization methods
|
|
@@ -37,9 +43,11 @@ export default class HtmlSanitizer {
|
|
|
37
43
|
* - Removes HTML comments, script, and style tags
|
|
38
44
|
* - Enforces DoS protection with size limits
|
|
39
45
|
* - Validates allowed tags is a valid array
|
|
46
|
+
* - Supports preserving specific attributes on allowed tags
|
|
40
47
|
*
|
|
41
48
|
* @param html - The HTML string to clean
|
|
42
49
|
* @param allowedTags - Array of allowed tag names (case-insensitive)
|
|
50
|
+
* @param allowedAttributes - Optional object mapping tag names to arrays of allowed attribute names
|
|
43
51
|
* @returns Sanitized HTML string with only allowed tags
|
|
44
52
|
*
|
|
45
53
|
* @example
|
|
@@ -55,8 +63,17 @@ export default class HtmlSanitizer {
|
|
|
55
63
|
* @example
|
|
56
64
|
* // Allow common formatting tags
|
|
57
65
|
* HtmlSanitizer.clean(userInput, ['p', 'br', 'strong', 'em', 'a', 'ul', 'ol', 'li']);
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* // Allow specific attributes on tags
|
|
69
|
+
* HtmlSanitizer.clean(html, ['span', 'a'], {
|
|
70
|
+
* span: ['style', 'class', 'data-uuid'],
|
|
71
|
+
* a: ['href', 'target', 'rel']
|
|
72
|
+
* });
|
|
73
|
+
* // Input: '<span class="legal-tag" data-uuid="123" onclick="alert()">Text</span>'
|
|
74
|
+
* // Output: '<span class="legal-tag" data-uuid="123">Text</span>'
|
|
58
75
|
*/
|
|
59
|
-
static clean(html: string, allowedTags: string[]): string;
|
|
76
|
+
static clean(html: string, allowedTags: string[], allowedAttributes?: Record<string, string[]>): string;
|
|
60
77
|
/**
|
|
61
78
|
* Sanitizes basic HTML content by allowing only b, i, u, and a tags.
|
|
62
79
|
* Common use case for simple user-generated content.
|
|
@@ -174,6 +191,43 @@ export default class HtmlSanitizer {
|
|
|
174
191
|
* // Returns: true
|
|
175
192
|
*/
|
|
176
193
|
static isValidUrl(url: string): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Sanitizes CSS style attribute values to prevent XSS attacks.
|
|
196
|
+
* Only allows safe inline color styles for the current use case.
|
|
197
|
+
*
|
|
198
|
+
* Security Features:
|
|
199
|
+
* - Strips potentially dangerous CSS properties (behavior, -moz-binding, etc.)
|
|
200
|
+
* - Validates color values (hex, rgb, rgba, named colors)
|
|
201
|
+
* - Removes expressions and url() functions that could load external content
|
|
202
|
+
* - Blocks @import and other directives
|
|
203
|
+
* - Limits to safe CSS properties for inline styling
|
|
204
|
+
*
|
|
205
|
+
* @param style - The style attribute value to sanitize
|
|
206
|
+
* @returns Sanitized style string or empty string if invalid
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* HtmlSanitizer.sanitizeStyleAttribute('color: red; background: blue;');
|
|
210
|
+
* // Returns: 'color: red'
|
|
211
|
+
*
|
|
212
|
+
* @example
|
|
213
|
+
* HtmlSanitizer.sanitizeStyleAttribute('color: #ff0000; behavior: url(xss.htc);');
|
|
214
|
+
* // Returns: 'color: #ff0000' (dangerous property removed)
|
|
215
|
+
*/
|
|
216
|
+
static sanitizeStyleAttribute(style: string): string;
|
|
217
|
+
/**
|
|
218
|
+
* Validates if a CSS color value is safe.
|
|
219
|
+
* Allows hex colors, rgb/rgba, and named colors.
|
|
220
|
+
*
|
|
221
|
+
* @param value - The color value to validate
|
|
222
|
+
* @returns True if the color value is safe, false otherwise
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* HtmlSanitizer.isValidColorValue('#ff0000'); // true
|
|
226
|
+
* HtmlSanitizer.isValidColorValue('rgb(255, 0, 0)'); // true
|
|
227
|
+
* HtmlSanitizer.isValidColorValue('red'); // true
|
|
228
|
+
* HtmlSanitizer.isValidColorValue('javascript:alert(1)'); // false
|
|
229
|
+
*/
|
|
230
|
+
static isValidColorValue(value: string): boolean;
|
|
177
231
|
/**
|
|
178
232
|
* Validates if an email address is properly formatted.
|
|
179
233
|
* Performs comprehensive email validation following RFC 5321/5322 standards.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HtmlSanitizer.d.ts","sourceRoot":"","sources":["../../src/sanitizer/HtmlSanitizer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"HtmlSanitizer.d.ts","sourceRoot":"","sources":["../../src/sanitizer/HtmlSanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAeH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AA4DD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAKhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,MAAM,CAAC,KAAK,CACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC3C,MAAM;IAyVT;;;;;;;;;;OAUG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI9C;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,oBAAoB,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,MAAM;IA4CT;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAkCzC;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQrC;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA2BjD;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA6B5C;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IA+EvC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA8FpD;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAmDhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAuI3C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAqFhD;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG"}
|
|
@@ -6,14 +6,20 @@
|
|
|
6
6
|
* Security Features:
|
|
7
7
|
* - XSS Prevention: Blocks dangerous protocols (javascript:, data:, vbscript:, etc.)
|
|
8
8
|
* - DoS Protection: Enforces maximum input size limits
|
|
9
|
+
* - Never-Allow List: Blocks inherently dangerous tags (script, iframe, form, etc.)
|
|
10
|
+
* - Multi-Pass Entity Decoding: Prevents nested encoding attacks
|
|
11
|
+
* - Null Byte Protection: Removes string termination attack vectors
|
|
12
|
+
* - Event Handler Removal: Strips all event attributes (onclick, onerror, etc.)
|
|
9
13
|
* - Script/Style Removal: Completely removes script and style tags with content
|
|
10
14
|
* - HTML Comment Stripping: Removes comments that could hide malicious content
|
|
11
15
|
* - URL Validation: Validates and sanitizes URLs in anchor tags
|
|
16
|
+
* - External Link Security: Auto-adds target="_blank" rel="noopener noreferrer"
|
|
12
17
|
* - Entity Decoding: Safely decodes HTML entities with range validation
|
|
13
18
|
* - Attribute Escaping: Prevents attribute injection attacks
|
|
19
|
+
* - Final Security Check: Verifies output before returning
|
|
14
20
|
*
|
|
15
21
|
* @module HtmlSanitizer
|
|
16
|
-
* @version
|
|
22
|
+
* @version 3.0.0
|
|
17
23
|
*/
|
|
18
24
|
import { logger } from '../logger/Logger.js';
|
|
19
25
|
// ============================================================================
|
|
@@ -39,6 +45,31 @@ const DANGEROUS_PROTOCOLS = /^(javascript:|vbscript:|data:|file:|about:|blob:)/i
|
|
|
39
45
|
* Safe protocols allowed in URLs
|
|
40
46
|
*/
|
|
41
47
|
const SAFE_PROTOCOLS = /^(https?:\/\/|mailto:|tel:|sms:|\/|\.\/|\.\.\/|#)/i;
|
|
48
|
+
/**
|
|
49
|
+
* Tags that should NEVER be allowed, even if explicitly requested
|
|
50
|
+
* These tags can execute scripts, load external content, or modify page behavior
|
|
51
|
+
*/
|
|
52
|
+
const NEVER_ALLOWED_TAGS = new Set([
|
|
53
|
+
'script', // JavaScript execution
|
|
54
|
+
'style', // Can load external content via @import
|
|
55
|
+
'iframe', // Can load external content
|
|
56
|
+
'object', // Can load external content/plugins
|
|
57
|
+
'embed', // Can load external content/plugins
|
|
58
|
+
'applet', // Java applets (deprecated but dangerous)
|
|
59
|
+
'link', // Can load external stylesheets
|
|
60
|
+
'base', // Can change all relative URLs
|
|
61
|
+
'meta', // Can do redirects, set encoding
|
|
62
|
+
'form', // Can submit data to external sites
|
|
63
|
+
'input', // Form inputs
|
|
64
|
+
'button', // Can trigger actions
|
|
65
|
+
'textarea', // Form inputs
|
|
66
|
+
'select', // Form inputs
|
|
67
|
+
]);
|
|
68
|
+
/**
|
|
69
|
+
* Maximum number of entity decoding passes to prevent infinite loops
|
|
70
|
+
* while still catching multiple levels of encoding
|
|
71
|
+
*/
|
|
72
|
+
const MAX_DECODE_PASSES = 3;
|
|
42
73
|
// ============================================================================
|
|
43
74
|
// HtmlSanitizer Class
|
|
44
75
|
// ============================================================================
|
|
@@ -60,9 +91,11 @@ export default class HtmlSanitizer {
|
|
|
60
91
|
* - Removes HTML comments, script, and style tags
|
|
61
92
|
* - Enforces DoS protection with size limits
|
|
62
93
|
* - Validates allowed tags is a valid array
|
|
94
|
+
* - Supports preserving specific attributes on allowed tags
|
|
63
95
|
*
|
|
64
96
|
* @param html - The HTML string to clean
|
|
65
97
|
* @param allowedTags - Array of allowed tag names (case-insensitive)
|
|
98
|
+
* @param allowedAttributes - Optional object mapping tag names to arrays of allowed attribute names
|
|
66
99
|
* @returns Sanitized HTML string with only allowed tags
|
|
67
100
|
*
|
|
68
101
|
* @example
|
|
@@ -78,8 +111,17 @@ export default class HtmlSanitizer {
|
|
|
78
111
|
* @example
|
|
79
112
|
* // Allow common formatting tags
|
|
80
113
|
* HtmlSanitizer.clean(userInput, ['p', 'br', 'strong', 'em', 'a', 'ul', 'ol', 'li']);
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* // Allow specific attributes on tags
|
|
117
|
+
* HtmlSanitizer.clean(html, ['span', 'a'], {
|
|
118
|
+
* span: ['style', 'class', 'data-uuid'],
|
|
119
|
+
* a: ['href', 'target', 'rel']
|
|
120
|
+
* });
|
|
121
|
+
* // Input: '<span class="legal-tag" data-uuid="123" onclick="alert()">Text</span>'
|
|
122
|
+
* // Output: '<span class="legal-tag" data-uuid="123">Text</span>'
|
|
81
123
|
*/
|
|
82
|
-
static clean(html, allowedTags) {
|
|
124
|
+
static clean(html, allowedTags, allowedAttributes) {
|
|
83
125
|
// ====================================================================
|
|
84
126
|
// Step 1: Input Validation
|
|
85
127
|
// ====================================================================
|
|
@@ -106,6 +148,16 @@ export default class HtmlSanitizer {
|
|
|
106
148
|
});
|
|
107
149
|
return false;
|
|
108
150
|
}
|
|
151
|
+
const lowerTag = tag.toLowerCase();
|
|
152
|
+
// SECURITY: Block inherently dangerous tags even if requested
|
|
153
|
+
if (NEVER_ALLOWED_TAGS.has(lowerTag)) {
|
|
154
|
+
logger.warn('Dangerous tag blocked from allowed list', {
|
|
155
|
+
code: 'SANITIZER_DANGEROUS_TAG_BLOCKED',
|
|
156
|
+
source: 'HtmlSanitizer.clean',
|
|
157
|
+
tag: lowerTag,
|
|
158
|
+
});
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
109
161
|
return true;
|
|
110
162
|
})
|
|
111
163
|
.map((tag) => tag.toLowerCase());
|
|
@@ -117,6 +169,37 @@ export default class HtmlSanitizer {
|
|
|
117
169
|
return this.stripAllTags(html);
|
|
118
170
|
}
|
|
119
171
|
// ====================================================================
|
|
172
|
+
// Step 2.5: Validate and Normalize Allowed Attributes
|
|
173
|
+
// ====================================================================
|
|
174
|
+
let normalizedAllowedAttributes = null;
|
|
175
|
+
if (allowedAttributes && typeof allowedAttributes === 'object') {
|
|
176
|
+
normalizedAllowedAttributes = {};
|
|
177
|
+
for (const [tagName, attrs] of Object.entries(allowedAttributes)) {
|
|
178
|
+
const lowerTag = tagName.toLowerCase();
|
|
179
|
+
// Skip if not in validAllowedTags
|
|
180
|
+
if (!validAllowedTags.includes(lowerTag)) {
|
|
181
|
+
logger.warn('Skipping attributes for tag not in allowed list', {
|
|
182
|
+
code: 'SANITIZER_ATTRIBUTES_FOR_DISALLOWED_TAG',
|
|
183
|
+
source: 'HtmlSanitizer.clean',
|
|
184
|
+
tag: lowerTag,
|
|
185
|
+
});
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (Array.isArray(attrs)) {
|
|
189
|
+
const validAttrs = attrs
|
|
190
|
+
.filter((attr) => typeof attr === 'string' && attr.length > 0)
|
|
191
|
+
.map((attr) => attr.toLowerCase());
|
|
192
|
+
if (validAttrs.length > 0) {
|
|
193
|
+
normalizedAllowedAttributes[lowerTag] = new Set(validAttrs);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// If no valid attributes were found, set to null
|
|
198
|
+
if (Object.keys(normalizedAllowedAttributes).length === 0) {
|
|
199
|
+
normalizedAllowedAttributes = null;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// ====================================================================
|
|
120
203
|
// Step 3: DoS Protection
|
|
121
204
|
// ====================================================================
|
|
122
205
|
if (html.length > MAX_INPUT_SIZE) {
|
|
@@ -129,17 +212,56 @@ export default class HtmlSanitizer {
|
|
|
129
212
|
html = html.substring(0, MAX_INPUT_SIZE);
|
|
130
213
|
}
|
|
131
214
|
// ====================================================================
|
|
132
|
-
// Step 4: Remove
|
|
215
|
+
// Step 4: Remove Null Bytes (String Termination Attacks)
|
|
216
|
+
// ====================================================================
|
|
217
|
+
// SECURITY: Remove null bytes that could be used to terminate strings
|
|
218
|
+
// in some contexts and bypass filters
|
|
219
|
+
html = html.replace(/\0/g, '');
|
|
220
|
+
// ====================================================================
|
|
221
|
+
// Step 5: Decode HTML Entities Multiple Times (XSS Prevention)
|
|
222
|
+
// ====================================================================
|
|
223
|
+
// SECURITY: Decode entities multiple times to catch nested encoding attacks
|
|
224
|
+
// For example: &lt;script&gt; -> <script> -> <script>
|
|
225
|
+
// We do multiple passes (up to MAX_DECODE_PASSES) until no more changes occur
|
|
226
|
+
let previousHtml = '';
|
|
227
|
+
let decodePass = 0;
|
|
228
|
+
while (html !== previousHtml && decodePass < MAX_DECODE_PASSES) {
|
|
229
|
+
previousHtml = html;
|
|
230
|
+
html = this.decodeHtmlEntities(html);
|
|
231
|
+
decodePass++;
|
|
232
|
+
}
|
|
233
|
+
if (decodePass >= MAX_DECODE_PASSES && html !== previousHtml) {
|
|
234
|
+
logger.warn('Max entity decode passes reached, possible encoding attack', {
|
|
235
|
+
code: 'SANITIZER_MAX_DECODE_PASSES',
|
|
236
|
+
source: 'HtmlSanitizer.clean',
|
|
237
|
+
passes: decodePass,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
// ====================================================================
|
|
241
|
+
// Step 6: Remove Dangerous Content
|
|
133
242
|
// ====================================================================
|
|
134
243
|
// Remove HTML comments (could hide malicious content)
|
|
135
244
|
let cleaned = html.replace(/<!--[\s\S]*?-->/g, '');
|
|
136
|
-
// Remove
|
|
137
|
-
|
|
245
|
+
// Remove dangerous tags entirely (including their content)
|
|
246
|
+
// This is a safety net - these should already be blocked, but we remove them
|
|
247
|
+
// in case they appear in the content
|
|
248
|
+
cleaned = cleaned.replace(/<(script|style|iframe|object|embed|applet|link|base|meta|form|input|button|textarea|select)[^>]*>[\s\S]*?<\/\1>/gi, '');
|
|
249
|
+
// Also remove self-closing dangerous tags
|
|
250
|
+
cleaned = cleaned.replace(/<(script|style|iframe|object|embed|applet|link|base|meta|form|input|button|textarea|select)[^>]*\/?>/gi, '');
|
|
138
251
|
// ====================================================================
|
|
139
|
-
// Step
|
|
252
|
+
// Step 7: Process HTML Tags
|
|
140
253
|
// ====================================================================
|
|
141
254
|
cleaned = cleaned.replace(/<\/?([a-z][a-z0-9]*)\b[^>]*>/gi, (match, tagName) => {
|
|
142
255
|
const lowerTagName = tagName.toLowerCase();
|
|
256
|
+
// Extra safety: block dangerous tags even if they somehow got through
|
|
257
|
+
if (NEVER_ALLOWED_TAGS.has(lowerTagName)) {
|
|
258
|
+
logger.warn('Dangerous tag removed from content', {
|
|
259
|
+
code: 'SANITIZER_DANGEROUS_TAG_REMOVED',
|
|
260
|
+
source: 'HtmlSanitizer.clean',
|
|
261
|
+
tag: lowerTagName,
|
|
262
|
+
});
|
|
263
|
+
return '';
|
|
264
|
+
}
|
|
143
265
|
// Remove tags not in the allowed list (preserve text content)
|
|
144
266
|
if (!validAllowedTags.includes(lowerTagName)) {
|
|
145
267
|
return '';
|
|
@@ -150,41 +272,139 @@ export default class HtmlSanitizer {
|
|
|
150
272
|
}
|
|
151
273
|
// Detect self-closing tags
|
|
152
274
|
const isSelfClosing = match.endsWith('/>');
|
|
153
|
-
//
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
code: 'SANITIZER_UNSAFE_URL',
|
|
275
|
+
// Extract and process attributes if allowedAttributes is specified
|
|
276
|
+
const preservedAttributes = [];
|
|
277
|
+
const allowedAttrsForTag = normalizedAllowedAttributes?.[lowerTagName];
|
|
278
|
+
if (allowedAttrsForTag) {
|
|
279
|
+
// Extract all attributes from the tag
|
|
280
|
+
const attrRegex = /([a-z][a-z0-9-]*)\s*=\s*["']([^"']*)["']/gi;
|
|
281
|
+
let attrMatch;
|
|
282
|
+
while ((attrMatch = attrRegex.exec(match)) !== null) {
|
|
283
|
+
const attrName = attrMatch[1].toLowerCase();
|
|
284
|
+
const attrValue = attrMatch[2];
|
|
285
|
+
// Skip event handlers (onclick, onerror, etc.)
|
|
286
|
+
if (attrName.startsWith('on')) {
|
|
287
|
+
logger.warn('Event handler attribute removed', {
|
|
288
|
+
code: 'SANITIZER_EVENT_HANDLER_REMOVED',
|
|
168
289
|
source: 'HtmlSanitizer.clean',
|
|
169
|
-
|
|
290
|
+
attribute: attrName,
|
|
170
291
|
});
|
|
171
|
-
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
// Check if this attribute is allowed for this tag
|
|
295
|
+
if (allowedAttrsForTag.has(attrName)) {
|
|
296
|
+
// Special handling for href attribute - must validate URL
|
|
297
|
+
if (attrName === 'href') {
|
|
298
|
+
const url = attrValue.trim();
|
|
299
|
+
if (this.isValidUrl(url)) {
|
|
300
|
+
const escapedUrl = this.sanitizeForAttribute(url);
|
|
301
|
+
preservedAttributes.push(`href="${escapedUrl}"`);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
logger.warn('Unsafe URL removed from href attribute', {
|
|
305
|
+
code: 'SANITIZER_UNSAFE_HREF',
|
|
306
|
+
source: 'HtmlSanitizer.clean',
|
|
307
|
+
url,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Special handling for style attribute - validate CSS
|
|
312
|
+
else if (attrName === 'style') {
|
|
313
|
+
const sanitizedStyle = this.sanitizeStyleAttribute(attrValue);
|
|
314
|
+
if (sanitizedStyle) {
|
|
315
|
+
preservedAttributes.push(`style="${sanitizedStyle}"`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// For other allowed attributes, sanitize the value
|
|
319
|
+
else {
|
|
320
|
+
const escapedValue = this.sanitizeForAttribute(attrValue);
|
|
321
|
+
preservedAttributes.push(`${attrName}="${escapedValue}"`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Special handling for anchor tags - validate URLs and add security attributes
|
|
327
|
+
if (lowerTagName === 'a') {
|
|
328
|
+
// If we haven't already handled href through allowedAttributes, handle it the old way
|
|
329
|
+
if (!allowedAttrsForTag?.has('href')) {
|
|
330
|
+
const hrefMatch = match.match(/href\s*=\s*["']([^"']*)["']/i);
|
|
331
|
+
if (hrefMatch && hrefMatch[1]) {
|
|
332
|
+
const url = hrefMatch[1].trim();
|
|
333
|
+
// Validate URL for security
|
|
334
|
+
if (this.isValidUrl(url)) {
|
|
335
|
+
// Escape the URL to prevent attribute injection
|
|
336
|
+
const escapedUrl = this.sanitizeForAttribute(url);
|
|
337
|
+
preservedAttributes.push(`href="${escapedUrl}"`);
|
|
338
|
+
// SECURITY: Add target="_blank" and rel="noopener noreferrer" for external links
|
|
339
|
+
// This prevents tab nabbing attacks and ensures the new page can't access window.opener
|
|
340
|
+
const isExternal = /^https?:\/\//i.test(url);
|
|
341
|
+
if (isExternal) {
|
|
342
|
+
// Only add these if not already in preservedAttributes
|
|
343
|
+
if (!preservedAttributes.some((attr) => attr.startsWith('target='))) {
|
|
344
|
+
preservedAttributes.push('target="_blank"');
|
|
345
|
+
}
|
|
346
|
+
if (!preservedAttributes.some((attr) => attr.startsWith('rel='))) {
|
|
347
|
+
preservedAttributes.push('rel="noopener noreferrer"');
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
// Invalid URL - remove href but keep anchor tag
|
|
353
|
+
logger.warn('Unsafe URL removed from anchor tag', {
|
|
354
|
+
code: 'SANITIZER_UNSAFE_URL',
|
|
355
|
+
source: 'HtmlSanitizer.clean',
|
|
356
|
+
url,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
172
359
|
}
|
|
173
360
|
}
|
|
174
361
|
else {
|
|
175
|
-
//
|
|
176
|
-
|
|
362
|
+
// If href was handled through allowedAttributes, still add security attributes for external links
|
|
363
|
+
const hrefAttr = preservedAttributes.find((attr) => attr.startsWith('href='));
|
|
364
|
+
if (hrefAttr) {
|
|
365
|
+
const urlMatch = hrefAttr.match(/href="([^"]*)"/);
|
|
366
|
+
if (urlMatch) {
|
|
367
|
+
const url = urlMatch[1];
|
|
368
|
+
const isExternal = /^https?:\/\//i.test(url);
|
|
369
|
+
if (isExternal) {
|
|
370
|
+
if (!preservedAttributes.some((attr) => attr.startsWith('target='))) {
|
|
371
|
+
preservedAttributes.push('target="_blank"');
|
|
372
|
+
}
|
|
373
|
+
if (!preservedAttributes.some((attr) => attr.startsWith('rel='))) {
|
|
374
|
+
preservedAttributes.push('rel="noopener noreferrer"');
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
177
379
|
}
|
|
178
380
|
}
|
|
179
381
|
// Handle self-closing tags (br, hr, img)
|
|
180
382
|
if (isSelfClosing && ['br', 'hr', 'img'].includes(lowerTagName)) {
|
|
181
|
-
|
|
383
|
+
const attrString = preservedAttributes.length > 0 ? ' ' + preservedAttributes.join(' ') : '';
|
|
384
|
+
return `<${lowerTagName}${attrString} />`;
|
|
385
|
+
}
|
|
386
|
+
// Build the tag with preserved attributes
|
|
387
|
+
if (preservedAttributes.length > 0) {
|
|
388
|
+
return `<${lowerTagName} ${preservedAttributes.join(' ')}>`;
|
|
182
389
|
}
|
|
183
390
|
// For all other allowed tags, return simple opening tag
|
|
184
391
|
return `<${lowerTagName}>`;
|
|
185
392
|
});
|
|
186
393
|
// ====================================================================
|
|
187
|
-
// Step
|
|
394
|
+
// Step 8: Final Security Check
|
|
395
|
+
// ====================================================================
|
|
396
|
+
// Final pass: ensure no dangerous patterns remain
|
|
397
|
+
// Check for any remaining script/style tags (case insensitive)
|
|
398
|
+
if (/<(script|style|iframe|object|embed)/i.test(cleaned)) {
|
|
399
|
+
logger.error('Dangerous tags still present after sanitization', {
|
|
400
|
+
code: 'SANITIZER_DANGEROUS_CONTENT_REMAINING',
|
|
401
|
+
source: 'HtmlSanitizer.clean',
|
|
402
|
+
});
|
|
403
|
+
// Strip all tags as a safety measure
|
|
404
|
+
return this.stripAllTags(cleaned);
|
|
405
|
+
}
|
|
406
|
+
// ====================================================================
|
|
407
|
+
// Step 9: Final Cleanup
|
|
188
408
|
// ====================================================================
|
|
189
409
|
// Normalize whitespace
|
|
190
410
|
cleaned = cleaned.replace(/\s+/g, ' ').trim();
|
|
@@ -492,6 +712,166 @@ export default class HtmlSanitizer {
|
|
|
492
712
|
}
|
|
493
713
|
return true;
|
|
494
714
|
}
|
|
715
|
+
/**
|
|
716
|
+
* Sanitizes CSS style attribute values to prevent XSS attacks.
|
|
717
|
+
* Only allows safe inline color styles for the current use case.
|
|
718
|
+
*
|
|
719
|
+
* Security Features:
|
|
720
|
+
* - Strips potentially dangerous CSS properties (behavior, -moz-binding, etc.)
|
|
721
|
+
* - Validates color values (hex, rgb, rgba, named colors)
|
|
722
|
+
* - Removes expressions and url() functions that could load external content
|
|
723
|
+
* - Blocks @import and other directives
|
|
724
|
+
* - Limits to safe CSS properties for inline styling
|
|
725
|
+
*
|
|
726
|
+
* @param style - The style attribute value to sanitize
|
|
727
|
+
* @returns Sanitized style string or empty string if invalid
|
|
728
|
+
*
|
|
729
|
+
* @example
|
|
730
|
+
* HtmlSanitizer.sanitizeStyleAttribute('color: red; background: blue;');
|
|
731
|
+
* // Returns: 'color: red'
|
|
732
|
+
*
|
|
733
|
+
* @example
|
|
734
|
+
* HtmlSanitizer.sanitizeStyleAttribute('color: #ff0000; behavior: url(xss.htc);');
|
|
735
|
+
* // Returns: 'color: #ff0000' (dangerous property removed)
|
|
736
|
+
*/
|
|
737
|
+
static sanitizeStyleAttribute(style) {
|
|
738
|
+
if (!style || typeof style !== 'string') {
|
|
739
|
+
return '';
|
|
740
|
+
}
|
|
741
|
+
// Trim whitespace
|
|
742
|
+
style = style.trim();
|
|
743
|
+
if (style.length === 0) {
|
|
744
|
+
return '';
|
|
745
|
+
}
|
|
746
|
+
// DoS protection
|
|
747
|
+
if (style.length > 1024) {
|
|
748
|
+
logger.warn('Style attribute exceeds maximum length', {
|
|
749
|
+
code: 'SANITIZER_STYLE_TOO_LONG',
|
|
750
|
+
source: 'HtmlSanitizer.sanitizeStyleAttribute',
|
|
751
|
+
length: style.length,
|
|
752
|
+
});
|
|
753
|
+
return '';
|
|
754
|
+
}
|
|
755
|
+
// For our use case, only allow color-related properties
|
|
756
|
+
const allowedProperties = ['color', 'background-color'];
|
|
757
|
+
// Split style into individual declarations
|
|
758
|
+
const declarations = style
|
|
759
|
+
.split(';')
|
|
760
|
+
.map((decl) => decl.trim())
|
|
761
|
+
.filter(Boolean);
|
|
762
|
+
const sanitizedDeclarations = [];
|
|
763
|
+
for (const declaration of declarations) {
|
|
764
|
+
const colonIndex = declaration.indexOf(':');
|
|
765
|
+
if (colonIndex === -1)
|
|
766
|
+
continue;
|
|
767
|
+
const property = declaration.substring(0, colonIndex).trim().toLowerCase();
|
|
768
|
+
const value = declaration.substring(colonIndex + 1).trim();
|
|
769
|
+
// Only allow whitelisted properties
|
|
770
|
+
if (!allowedProperties.includes(property)) {
|
|
771
|
+
logger.warn('Disallowed CSS property filtered out', {
|
|
772
|
+
code: 'SANITIZER_DISALLOWED_CSS_PROPERTY',
|
|
773
|
+
source: 'HtmlSanitizer.sanitizeStyleAttribute',
|
|
774
|
+
property,
|
|
775
|
+
});
|
|
776
|
+
continue;
|
|
777
|
+
}
|
|
778
|
+
// Check for dangerous patterns in the value
|
|
779
|
+
const dangerousPatterns = [
|
|
780
|
+
/javascript:/i,
|
|
781
|
+
/expression\s*\(/i,
|
|
782
|
+
/-moz-binding/i,
|
|
783
|
+
/behavior\s*:/i,
|
|
784
|
+
/@import/i,
|
|
785
|
+
/url\s*\(/i,
|
|
786
|
+
/data:/i,
|
|
787
|
+
];
|
|
788
|
+
let hasDangerousPattern = false;
|
|
789
|
+
for (const pattern of dangerousPatterns) {
|
|
790
|
+
if (pattern.test(value)) {
|
|
791
|
+
logger.warn('Dangerous pattern detected in CSS value', {
|
|
792
|
+
code: 'SANITIZER_DANGEROUS_CSS_VALUE',
|
|
793
|
+
source: 'HtmlSanitizer.sanitizeStyleAttribute',
|
|
794
|
+
property,
|
|
795
|
+
});
|
|
796
|
+
hasDangerousPattern = true;
|
|
797
|
+
break;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
if (hasDangerousPattern) {
|
|
801
|
+
continue;
|
|
802
|
+
}
|
|
803
|
+
// Validate color value
|
|
804
|
+
if (this.isValidColorValue(value)) {
|
|
805
|
+
const escapedValue = this.sanitizeForAttribute(value);
|
|
806
|
+
sanitizedDeclarations.push(`${property}: ${escapedValue}`);
|
|
807
|
+
}
|
|
808
|
+
else {
|
|
809
|
+
logger.warn('Invalid color value in style attribute', {
|
|
810
|
+
code: 'SANITIZER_INVALID_COLOR_VALUE',
|
|
811
|
+
source: 'HtmlSanitizer.sanitizeStyleAttribute',
|
|
812
|
+
value,
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
return sanitizedDeclarations.join('; ');
|
|
817
|
+
}
|
|
818
|
+
/**
|
|
819
|
+
* Validates if a CSS color value is safe.
|
|
820
|
+
* Allows hex colors, rgb/rgba, and named colors.
|
|
821
|
+
*
|
|
822
|
+
* @param value - The color value to validate
|
|
823
|
+
* @returns True if the color value is safe, false otherwise
|
|
824
|
+
*
|
|
825
|
+
* @example
|
|
826
|
+
* HtmlSanitizer.isValidColorValue('#ff0000'); // true
|
|
827
|
+
* HtmlSanitizer.isValidColorValue('rgb(255, 0, 0)'); // true
|
|
828
|
+
* HtmlSanitizer.isValidColorValue('red'); // true
|
|
829
|
+
* HtmlSanitizer.isValidColorValue('javascript:alert(1)'); // false
|
|
830
|
+
*/
|
|
831
|
+
static isValidColorValue(value) {
|
|
832
|
+
if (!value || typeof value !== 'string') {
|
|
833
|
+
return false;
|
|
834
|
+
}
|
|
835
|
+
value = value.trim();
|
|
836
|
+
// Hex color (#fff or #ffffff)
|
|
837
|
+
if (/^#[0-9a-f]{3}([0-9a-f]{3})?$/i.test(value)) {
|
|
838
|
+
return true;
|
|
839
|
+
}
|
|
840
|
+
// RGB/RGBA color
|
|
841
|
+
if (/^rgba?\s*\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}(\s*,\s*[0-9.]+)?\s*\)$/i.test(value)) {
|
|
842
|
+
return true;
|
|
843
|
+
}
|
|
844
|
+
// Named colors (common safe colors)
|
|
845
|
+
const namedColors = [
|
|
846
|
+
'black',
|
|
847
|
+
'white',
|
|
848
|
+
'red',
|
|
849
|
+
'green',
|
|
850
|
+
'blue',
|
|
851
|
+
'yellow',
|
|
852
|
+
'orange',
|
|
853
|
+
'purple',
|
|
854
|
+
'pink',
|
|
855
|
+
'brown',
|
|
856
|
+
'gray',
|
|
857
|
+
'grey',
|
|
858
|
+
'cyan',
|
|
859
|
+
'magenta',
|
|
860
|
+
'lime',
|
|
861
|
+
'navy',
|
|
862
|
+
'teal',
|
|
863
|
+
'aqua',
|
|
864
|
+
'maroon',
|
|
865
|
+
'olive',
|
|
866
|
+
'silver',
|
|
867
|
+
'fuchsia',
|
|
868
|
+
'transparent',
|
|
869
|
+
];
|
|
870
|
+
if (namedColors.includes(value.toLowerCase())) {
|
|
871
|
+
return true;
|
|
872
|
+
}
|
|
873
|
+
return false;
|
|
874
|
+
}
|
|
495
875
|
/**
|
|
496
876
|
* Validates if an email address is properly formatted.
|
|
497
877
|
* Performs comprehensive email validation following RFC 5321/5322 standards.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HtmlSanitizer.js","sourceRoot":"","sources":["../../src/sanitizer/HtmlSanitizer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HtmlSanitizer.js","sourceRoot":"","sources":["../../src/sanitizer/HtmlSanitizer.ts"],"names":[],"mappings":"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"}
|