Существуют библиотеки, такие как OW ASP java кодер , которые позволяют относительно легко внедрить ненадежный контент в любой контекст. Я ищу что-то, что может сделать это в контексте блока JavaScript, и мне нужно, чтобы оно работало в Node.js.
В частности, я пытаюсь написать маршрут Express, который будет вернуть динамику c JavaScript. Вариант использования выглядит примерно так:
<script src="/my-custom-route?config1=A&config2=B"></script>
Вот очень неправильная, плохая и наивная реализация, которая, надеюсь, поможет нарисовать картину того, что я пытаюсь выполнить sh:
let scriptCache = null;
server.get(
'/my-custom-route',
async (req, res) => {
const config1 = req.query && req.query.config1 ? req.query.config1 : '';
const config2 = req.query && req.query.config2 ? req.query.config2 : '';
if (scriptCache === null) {
scriptCache = await fs.readFile('./data/some-customizable-script.txt', 'utf-8');
}
//THIS IS A TERRIBLE BAD IDEA DONT DO THIS
const embedScript = scriptCache
.replace(/\$\{config1\}/g, encodeURIComponent(config1))
.replace(/\$\{config2\}/g, encodeURIComponent(config2));
res.set('Content-Type', 'application/javascript');
return res.status(200).send(embedScript);
}
);
Для целей этой иллюстрации предположим, что содержание some-customizable-script.txt
таково:
alert('${config1}');
Легко понять, как выполнить XSS с этой настройкой. Это то место, где я обычно берусь за encode.forJavascript()
, но я не могу найти библиотеку, которая реализует этот выходной контекст. Я нашел два, которые кажутся достаточно сложными ( XSS и XSS-Filters ), но, насколько я могу судить, оба нацелены на вывод HTML.
Есть ли надежная библиотека для этого в node.js?