logo

Database

Javascript Injection Of Untrusted Content

Description

Detects Express.js route handlers that inject unsanitized HTTP request data directly into HTML responses via res.send(). When user-controlled input from req.query, req.body, req.params, req.headers, or req.cookies is embedded in HTML without sanitization, attackers can inject malicious scripts that execute in victims' browsers.

Weakness:

184 - Lack of data validation

Category: Unexpected Injection

Detection Strategy

    • Identifies Express.js files via require('express') import

    • Locates res.send() calls whose argument contains HTML markup (tags matched via regex)

    • Traces the HTML argument to determine if it contains user-supplied data from HTTP request properties (req.query, req.body, req.params, req.headers, req.cookies)

    • Reports a vulnerability when unsanitized HTTP request data flows into an HTML string passed to res.send()

Vulnerable code example

const express = require('express');
const app = express();

app.get('/vulnerable1', (req, res) => {
    const userInput = req.query.name;
    res.send("<h1>" + userInput + "</h1>");
    // Vulnerable: user input directly rendered into HTML
});...

✅ Secure code example

const express = require('express');
const sanitizeHtml = require('sanitize-html');
const app = express();

app.get('/secure1', (req, res) => {
    const comment = req.query.comment;
    const clean = sanitizeHtml(comment);
    res.send(`<div>${clean}</div>`);...