Nodejs 过滤js等代码过滤js等代码

Nodejs 过滤js等代码过滤js等代码

发现nodeclub貌似只对标题用了xss过滤?内容没有?但是发js代码没影响,折腾的博客,打开就直接执行js代码了。 <script>while(true){}</script>

5 回复

Node.js 中过滤 JavaScript 等代码

背景

在 Web 应用中,防止跨站脚本攻击(XSS)是非常重要的。XSS 攻击可以通过注入恶意的 JavaScript 代码来窃取用户数据或进行其他恶意操作。本文将介绍如何使用 Node.js 来过滤掉用户输入中的 JavaScript 代码。

示例代码

假设我们有一个简单的应用,用户可以发布评论。我们需要确保这些评论不包含任何潜在的危险的 HTML 或 JavaScript 代码。

1. 使用 he 库进行 HTML 实体编码
const he = require('he');

function sanitizeHtml(input) {
    return he.encode(input, {useNamedReferences: true});
}

const userComment = "<script>alert('XSS');</script>";
const safeComment = sanitizeHtml(userComment);
console.log(safeComment); // 输出 &lt;script&gt;alert('XSS');&lt;/script&gt;
2. 使用 dompurify 库进行更复杂的 HTML 清理

dompurify 是一个更强大的库,可以用来清理 HTML 并移除潜在的危险标签和属性。

const DOMPurify = require('dompurify');
const { JSDOM } = require('jsdom');

const window = new JSDOM('').window;
const DOMPurify = require('dompurify')(window);

function sanitizeHtml(input) {
    return DOMPurify.sanitize(input);
}

const userComment = "<script>alert('XSS');</script>";
const safeComment = sanitizeHtml(userComment);
console.log(safeComment); // 输出 ""

解释

  • he:这个库用于将 HTML 实体进行编码,例如将 < 编码为 &lt;,这样浏览器就不会将其解析为 HTML 标签。

  • dompurify:这个库更加复杂,它可以完全移除潜在的危险标签,如 <script><style> 标签,并且还可以配置允许哪些标签和属性,从而提供更高的安全性。

通过上述方法,我们可以有效地防止用户输入中的 JavaScript 代码被执行,从而避免 XSS 攻击。在实际应用中,建议结合使用这两种方法以达到最佳效果。


因为用的是innerText而不是innerHTML

不是吧。。

23333333333333

根据你的描述,这看起来像是一个跨站脚本(XSS)攻击的风险。你需要确保用户提交的内容被正确地转义或过滤,以防止潜在的安全问题。下面是一些步骤和代码示例,说明如何在Node.js中处理这个问题。

示例代码

你可以使用 he 库来安全地转义HTML实体,或者使用 xss-filters 来更严格地过滤输入内容。

安装依赖

npm install he xss-filters

转义HTML实体

const he = require('he');

function escapeHtml(input) {
    return he.encode(input);
}

// 使用示例
let unsafeContent = "<script>alert('XSS Attack!');</script>";
let safeContent = escapeHtml(unsafeContent);
console.log(safeContent); // &lt;script&gt;alert('XSS Attack!');&lt;/script&gt;

使用 xss-filters

const xssFilters = require('xss-filters');

function filterXSS(input) {
    return xssFilters.html(input);
}

// 使用示例
let unsafeContent = "<script>alert('XSS Attack!');</script>";
let safeContent = filterXSS(unsafeContent);
console.log(safeContent); // alert('XSS Attack!');

解释

  • he: 这个库用于将HTML特殊字符转义成它们对应的实体编码,例如 < 被转义为 &lt;,这样浏览器就不会将其解析为HTML标签。
  • xss-filters: 这个库提供了更严格的过滤机制,可以去除或替换潜在的恶意代码片段。

注意事项

  • 在实际应用中,建议同时使用这两种方法,以确保更高的安全性。
  • 不要仅依赖客户端(浏览器端)的过滤,因为恶意脚本可能绕过前端验证。
  • 对于敏感操作或数据存储,始终进行服务端验证和清理。

通过上述方法,你可以有效地防止用户输入中的JavaScript代码被执行,从而保护你的应用程序免受XSS攻击。

回到顶部