繁体   English   中英

Node、Express 和 MongoDB 中的 HTML 注入。 (EJS 模板引擎)

[英]HTML injection in Node, Express and MongoDB. (EJS templating engine)

我是网络开发的新手。 我对安全知之甚少。 我创建了一个论坛,用户可以在其中选择匿名交谈。 所以我不注册或要求用户登录。

我的应用程序有一个巨大的缺陷。当有人在我的输入字段中输入 HTML/CSS/JS 时,更改就会呈现到实际网站上。 我一直在为此进行头脑风暴,但无法找到解决此问题的方法。

我如何检测用户是在输入 HTML 还是 CSS,以及如何克服用户的这种不当行为。 由于输入的内容已保存到数据库中,因此每次都会呈现。 请帮助伙计们! 让溶液倾泻而下。

先感谢您。

EJS 已经有内置机制来防止 HTML 注入。 <%=标记转义 HTML。 例如:

<% var x = '<div>HTML Injection!</div>' %>
<%= x %>

将呈现类似于:

&lt;HTML Injection!&gt;

因此,即使看起来有人在键入代码,输出也应该是安全的。

HTML 注入可以在 EJS 中工作的唯一方法是,如果您故意使用<%-而不是<%=或通过重新定义escape选项来允许它。

如果你真的需要使用<%-那么 EJS 将停止保护你免受 HTML 注入并假设你知道你在做什么。 在这种情况下,避免 HTML 注入成为您的责任。 您可以通过将<替换为&lt;来手动执行 EJS 为您执行的操作&lt; >&gt; 或者通过从用户输入中完全删除 HTML 标签:

const some_input = req.query.some_data;

escaped_html_input = some_input.replace(/</g, '&lt;').replace(/>/g, '&gt;');

deleted_html_input = some_input.replace(/<.+?>/g, '');

save(escaped_html_input);

// or save(deleted_html_input);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM