lambda-live-debugger
Version:
Debug Lambda functions locally like it is running in the cloud
79 lines (76 loc) • 2.49 kB
JavaScript
/**
* XML context patterns.
*
* Detects injection vectors that are specifically dangerous when a string
* is inserted into an XML document (not HTML rendering context).
*
* Key distinction from HTML: these patterns target parser-level attacks —
* things that can confuse or subvert an XML parser, trigger external entity
* resolution, or inject DTD content. HTML rendering concerns (XSS) belong
* in the HTML context.
*/
const XML_PATTERNS = [
{
id: 'xml-cdata-injection',
description: 'CDATA section injection: <![CDATA[ breaks out of text node context',
pattern: /<!\[CDATA\[/i,
},
{
id: 'xml-cdata-close',
description: 'CDATA close sequence: ]]> can terminate an enclosing CDATA section',
pattern: /\]\]>/,
},
{
id: 'xml-processing-instruction',
description: 'XML processing instruction: <?xml-stylesheet or <?php etc.',
pattern: /<\?(?:xml[\- ]|php|asp)/i,
},
{
id: 'xml-doctype-injection',
description: 'DOCTYPE declaration embedded in content — can define entities',
// Match <!DOCTYPE followed by end-of-string, whitespace, or [ (internal subset)
pattern: /<!DOCTYPE(?:[\s[]|$)/i,
},
{
id: 'xml-entity-system',
description: 'SYSTEM keyword — used in external entity declarations (XXE)',
pattern: /\bSYSTEM\s+["']/i,
},
{
id: 'xml-entity-public',
description: 'PUBLIC keyword — used in external entity declarations (XXE)',
pattern: /\bPUBLIC\s+["']/i,
},
{
id: 'xml-entity-declaration',
description: '<!ENTITY declaration — defines entities, potential XXE or entity expansion',
pattern: /<!ENTITY[\s%]/i,
},
{
id: 'xml-billion-laughs',
description: 'Entity reference chaining / billion laughs: repeated &eX; style references',
// Heuristic: 3+ consecutive entity refs suggests expansion attack
pattern: /(?:&\w{1,20};){3,}/,
},
{
id: 'xml-namespace-confusion',
description: 'xmlns: attribute injection — can redefine namespaces to confuse parsers',
pattern: /\bxmlns\s*(?::\w{1,40})?\s*=/i,
},
{
id: 'xml-comment-injection',
description: '<!-- comment injection — can hide content from some parsers',
pattern: /<!--/,
},
{
id: 'xml-comment-close',
description: '--> closes an enclosing XML comment',
pattern: /-->/,
},
{
id: 'xml-pi-close',
description: '?> closes an enclosing processing instruction',
pattern: /\?>/,
},
];
export default XML_PATTERNS;