Nodejs HTML标签防XSS攻击过滤模块

Nodejs HTML标签防XSS攻击过滤模块

知错就改还是好孩子! 不管你这个xss如何, 总是一个好的开端. 我给你一个 XSS Cheat Sheet , 列出了各种XSS, 你测测这个模块能过滤掉多少! XSS Cheet Sheet

16 回复

Node.js HTML标签防XSS攻击过滤模块

在Web开发中,防止跨站脚本攻击(XSS)是一项重要的安全措施。为了帮助开发者更好地防范XSS攻击,我们可以使用一些成熟的库来过滤HTML标签。本文将介绍如何使用 xss 这个流行的Node.js模块来过滤HTML标签,从而有效防止XSS攻击。

安装 xss 模块

首先,你需要安装 xss 模块。你可以通过npm来安装它:

npm install xss

使用 xss 模块

接下来,我们来看一下如何使用 xss 模块来过滤HTML标签。以下是一个简单的示例:

const xss = require('xss');

// 示例输入
const input = `<script>alert('XSS');</script><div>Hello, World!</div>`;

// 过滤HTML标签
const filteredInput = xss(input);

console.log(filteredInput);

上述代码中,xss 函数会自动过滤掉所有潜在的恶意脚本,并保留安全的HTML标签。运行这段代码后,filteredInput 的输出将是:

<div>Hello, World!</div>

可以看到,<script> 标签被成功过滤掉了。

高级用法

xss 模块还提供了许多高级选项,允许你自定义过滤规则。例如,如果你希望某些标签或属性不被过滤掉,可以这样做:

const xss = require('xss');

// 示例输入
const input = `<a href="http://example.com" onclick="alert('XSS')">Click me</a>`;

// 自定义过滤规则
const options = {
    whiteList: {
        a: ['href']
    },
    stripIgnoreTagBody: ['script']
};

// 过滤HTML标签
const filteredInput = xss(input, options);

console.log(filteredInput);

在这个例子中,我们允许 <a> 标签保留 href 属性,但移除其他属性。同时,我们确保 <script> 标签中的内容被完全移除。

测试XSS攻击

为了测试 xss 模块的效果,你可以参考 XSS Cheat Sheet 中列出的各种XSS攻击方法。通过这些测试,你可以验证该模块是否能够有效地防御各种XSS攻击。

总之,使用 xss 模块可以大大简化XSS防护工作。通过简单的配置和调用,你可以轻松地过滤掉潜在的恶意脚本,保护你的Web应用免受XSS攻击的影响。


嘿嘿, 能处理 <a href="javas/**/cript:alert('XSS');"> 不?

<IMG SRC=“javascript:alert(‘XSS’);”>

收藏了,另外问下,

<BR SIZE="&{alert(‘XSS’)}">

这是什么用法?以前没有见过。。。

给力!

我属于还是在膜拜楼主的. 学习了

又有更新,希望大家继续踊跃拍砖

老雷洗心革面可喜可贺啊~果断watch啊

这些都是跟你学的,神马XSS,神马白名单

0.0.2了,加油! 我昨天说的是,我想隐藏或移除标签(及标签里的内容), 怎么处理?

新增了一个用于处理这些标签的函数

xss.onIgnoreTag = function (tag, html) {
  // tag:当前标签名(小写),如:a
  // html:当前标签的HTML代码,如:<a href="ooxx">
  // 返回新的标签HTML代码,如果想使用默认的处理方式,不返回任何值即可
  // 比如将标签替换为[removed]:return '[removed]';
  // 以下为默认的处理代码:
  return html.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

比如要直接隐藏这些标签:

xss.onIgnoreTag = function (tag, html) {
  return '';
};

详细使用方法看这里:https://github.com/leizongmin/js-xss

是Bug吧enter image description here

果断收藏了

蛮好的.

支持,很实用的库。

对于防止 Node.js 应用中的 XSS 攻击,可以使用一些成熟的库来帮助我们过滤不安全的 HTML 标签。其中一个非常流行且功能强大的库是 xss-filtersdompurify。这里我们将介绍如何使用 xss-filters 来实现这一目标。

使用 xss-filters 进行 XSS 防护

xss-filters 是一个轻量级的库,可以有效地对输入进行基本的 XSS 防护。以下是如何安装和使用它的步骤:

  1. 安装库:

    npm install xss-filters
    
  2. 使用库过滤输入:

    const xssFilters = require('xss-filters');
    
    function safeHTML(input) {
      return xssFilters.html(input);
    }
    
    // 示例
    const userInput = '<script>alert("XSS Attack!");</script>';
    const safeOutput = safeHTML(userInput);
    
    console.log(safeOutput);  // 输出: &lt;script&gt;alert("XSS Attack!");&lt;/script&gt;
    

在上述代码中,xssFilters.html() 方法会将所有可能用于执行脚本的特殊字符转换为 HTML 实体,从而阻止任何潜在的恶意脚本执行。

使用 dompurify 进行更复杂的 XSS 防护

如果你需要更高级的功能,如允许某些特定的 HTML 标签和属性,dompurify 是一个更好的选择。

  1. 安装库:

    npm install dompurify
    
  2. 使用库过滤输入:

    const DOMPurify = require('dompurify');
    const { JSDOM } = require('jsdom');
    
    const window = new JSDOM('').window;
    const DOMPurify = require('dompurify')(window);
    
    function safeHTML(input) {
      return DOMPurify.sanitize(input, { ALLOWED_TAGS: ['b', 'i', 'u'], ADD_ATTR: ['target'] });
    }
    
    // 示例
    const userInput = '<script>alert("XSS Attack!");</script><b>Safe Text</b>';
    const safeOutput = safeHTML(userInput);
    
    console.log(safeOutput);  // 输出: <b>Safe Text</b>
    

在这个例子中,DOMPurify.sanitize() 方法允许你指定哪些标签和属性是安全的,从而允许用户输入包含某些格式化的文本(如粗体),同时阻止所有潜在的脚本。

以上两种方法都可以有效地防止 XSS 攻击,选择哪种取决于你的具体需求。对于简单的场景,xss-filters 可以提供足够的保护;而对于需要保留某些 HTML 格式的复杂场景,dompurify 会更加合适。

回到顶部