Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端基础

  • 应用框架

  • 工程能力

  • 应用基础

    • 兼容性

    • 前端安全

      • XSS 防护组件
        • [XSS 防护] - SafeInnerHtml 组件
        • 功能特性
        • 使用示例
          • 1. 展示带表情文本
          • 2. 高亮关键字
          • 3. 普通富文本
          • 4. 自定义富文本
      • 前端安全开发总结
    • 国际化

    • 性能优化

    • 换肤

    • 无障碍

  • 专业领域

  • 业务场景

  • 大前端
  • 应用基础
  • 前端安全
gahing
2023-06-07
目录

XSS 防护组件草稿

# [XSS 防护] - SafeInnerHtml 组件

目标:方便安全的使用 innerHTML 属性,避免 xss 问题

# 功能特性

  • 支持表情展示,自动监听表情资源加载
  • 支持特定文本高亮及自定义配置
  • 支持自定义的 html 文本映射配置
  • 支持对富文本进行默认防护,自动过滤任何可能执行脚本的标签和属性 - 基于 xss 模块 (opens new window)的默认过滤能力
  • 支持指定白名单允许的 HTML 标记及其属性 - 基于 xss 模块的拓展能力 (opens new window)

# 使用示例

# 1. 展示带表情文本

<EmojiText html={'[捂脸]test'} wrapperTag="span" />
1

此时组件生成的 html 内容为:

<span>
  <img
    class="emoji_icon"
    src="emoji_icon.jpg"
    alt="[捂脸]" />test
</span>
1
2
3
4
5
6

# 2. 高亮关键字

<HighlightText html={'测试a和b'} highlightCls="keyword" highlightTag="span" words={['a', 'b']} />
1

此时组件生成的 html 片段为:

<div>测试<span class="keyword">a</span>和<span class="keyword">b</span></div>
1

# 3. 普通富文本

内容通常由服务端下发,比如运营配置的富文本描述

支持展示图片、链接、文本,需要禁用脚本执行,此时仅需要开启 enableXssPrevent 配置即可

注:未避免漏配, enableRichtextXssPrevent 默认值为 true

<RichText
    html={"<a title='test' href="javascript:alert(1)">hack</a>test<img src='./a.jpg' onerror='console.log'/>"}
    // 或者不配置
    enableXssPrevent={true}
/>
1
2
3
4
5

此时组件生成的 html 片段为:

<div><a title="test" href>hack</a>test<img src="./a.jpg" /></div>
1

# 4. 自定义富文本

明确指定富文本的元素和属性范围,可以采用 customXssPreventOptions 配置,具体配置见 xss github 项目 (opens new window)

<RichText
    html={"<a title='test' href="javascript:alert(1)">hack</a>test<img src='a.jpg' onerror='console.log'/>"}
    enableXssPrevent={true}
    xssOptions={{
        whiteList: {
            a: ["href", "title", "target"],
        },
    }}
/>
1
2
3
4
5
6
7
8
9

此时组件生成的 html 片段为:

<a title="test" href>hack</a>test&lt;img src='a.jpg' onerror='console.log'/&gt;
1
编辑 (opens new window)
上次更新: 2024/09/01, 23:56:56
浏览器兼容开发总结
前端安全开发总结

← 浏览器兼容开发总结 前端安全开发总结→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式