富文本输出如何避免XSS

news2024/11/24 17:56:18

    有时网站为了美观,会允许用户输入一些富文本,这样在显示的时候,就可以显示的更友好。虽然在输入富文本的时候在客户端进行了控制,但是,仍然难易避免一些攻击者通过抓包篡改数据绕过客户端的控制。因此,在服务器端收到富文本的数据之后,还是要进行净化处理。

     在写具体的解决方案之前,分别通过讯飞的星火系统进行了测试,回答如下:

回复说答案不对,重新再回答时,回答的依然是一模一样的。 最关键的是第二条解决方案明显不合适,“2.对特殊字符进行转义:对于HTML标记、脚本语言等特殊字符,需要对其进行转义,以防止它们被浏览器解析为有意义的内容。例如,将<替换为&lt;,将>替换为&gt;,将"替换为&quot;等。”   富文本是不能进行这种转换的,否则,富文本就不是富文本了,就变成文本了。所以,答案是错误的。

再尝试一下,chatgpt,同样的问题,答复如下:

关于ChatGpt的回答也出现在第二条上有一些问题:“输出过滤:在将富文本内容显示在页面上时,应该使用HTML过滤器和转义函数等安全措施来过滤和转义特殊字符,以避免恶意脚本代码被执行。 ”, 这里说的也没有具体说明哪些字符要转义。

于是进一步追问: 要转移哪些字符?

 其实,单引号和双引号转义会导致一些问题的,例如,富文本输入时,会带有标签的属性,而这些属性的值,一般都会使用单引号或者双引号。所以,转义在处理富文本时,一般不建议使用。

其实,星火和chatgpt给出的第一条是一般都采用的解决方案,就是过滤不安全的html标签【例如:script等】和某些危险的属性【例如:onclick等】。

对于过滤业界也有一些比较成熟的库可以使用:

1) antisamy,OWASP AntiSamy | OWASP Foundation

这个由OWASP提供的库,提供过滤HTML标签和属性的功能,提供了丰富的policy。具体实现代码可以参考:GitHub - OWASP/java-html-sanitizer: Takes third-party HTML and produces HTML that is safe to embed in your web application. Fast and easy to configure.

2) googlecode里的owasp java html sanitizer

提供了一个基础的策略,可以基于这个基础策略进行修改,使用的是owasp的policy builder类:org.owasp.html.HTMLPolicyBuilder,通过allowAttributes和allowElements添加支持的标签和属性。经过测试默认的策略里,img标签是不支持src是base64格式的数据的,所以如果想支持

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4
  //8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

e就必须要修改默认的策略img的src属性的正则表达式才可以,通过添加属性是不可以的。

另外还需要注意的一点是,在净化的时候,会修改原来的HTML结构,如果某些标签不完整,Sainitizer会将标签补充完整,例如:

<th scope="group">data</th> 
净化之后:
<table><tbody><th scope="group">data</th> </tbody></table>

<li class="test">data </li>
净化之后:
<ul><li class="test">data </li></ul>

具体的库可以参考:

  https://mvnrepository.com/artifact/com.googlecode.owasp-java-html-sanitizer/owasp-java-html-sanitizer

3)使用jsoup的库

默认SafeList定义了一个Basic的策略可以满足一般的需求,Basic的策略支持的标签和属性如下:

This safelist allows a fuller range of text nodes: a, b, blockquote, br, cite, code, dd, dl, dt, em, i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul, and appropriate attributes.

Links (a elements) can point to http, https, ftp, mailto, and have an enforced rel=nofollow attribute.

示例代码:

String unsafe = 
  "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Safelist.basic());
// now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

如果有特殊需求,可以通过SafeList的addTags和addAttributes 添加需要支持的标签和属性。

关于jsoup的具体信息可以参考:Prevent cross site scripting with jsoup。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【飞行棋】多人游戏-微信小程序开发流程详解

可曾记得小时候玩过的飞行棋游戏&#xff0c;是90后的都有玩过吧&#xff0c;现在重温一下&#xff0c;这是一个可以二到四个人参与的游戏&#xff0c;通过投骰子走棋&#xff0c;一开始靠运气&#xff0c;后面还靠自己选择&#xff0c;谁抢占先机才能赢&#xff0c;还可以和小…

Redis 三大特殊数据类型常见命令

Geospatial 朋友的定位&#xff0c;附近的人&#xff0c;打车距离计算 底层是 Zset&#xff0c;即可以使用Zset的命令操作Geospatial Redis3.2 开始支持的 1.添加地理位置 两极无法添加经度&#xff1a;-180 ~ 180&#xff08;度&#xff09;纬度&#xff1a;-85.05112878 ~ 8…

一、RestTemplate的使用

目录 1、新建项目springcloud&#xff08;File--->New--->Project&#xff09; 使用maven quickstart快速新建Maven项目 输入项目名称和Maven信息 确认Maven目录、配置文件、本地仓库&#xff0c;Finish即可 2、创建聚合项目springcloud-member、springcloud-order(项…

【人力资源管理】第2集 免费开源ERP: Odoo 16 Recruitment招聘管理 构建一体化企业人力资源管理

文章目录 前言一、概览二、主要功能1.组织空缺职位和职位申请2.追踪工作机会&#xff08;查看哪个渠道收到的申请最多&#xff09;3.定制您的招聘流程4.集成文档&#xff08;定义您自己的文件管理流程&#xff09;5.与Odoo应用程序完全集成 总结 前言 轻松处理您的招聘流程。 …

C++ 中到底是应该include .h文件还是应该include .cpp文件

在阅读一个较大的解决方案中&#xff0c;对于其他文件夹下的.h和.cpp文件&#xff0c;有时候#include“XXX.h”文件&#xff0c;有时候是#include“XXX.cpp”文件&#xff0c;而且二者还不能更换。下面就好好分析一下他们二者的区别。 测试 测试&#xff1a;XXX.h和XXX.cpp…

连接器:一种可靠耐用、节约成本的同为科技(TOWE)工业连接器

随着我国经济建设水平的飞速发展&#xff0c;工业连接器被广泛应用于工业、化工、机场、船舶、码头、建筑、铁路、医疗、会展、商业演出等领域。工业连接器的作用是用于连接一个电路导体与另一个电路导体、或一个传输元件与另一个传输元件的装置&#xff0c;并且为两个电路子系…

知识变现海哥:六种常见的知识变现渠道

什么是知识变现&#xff1f;就是用你所会的知识技能&#xff0c;在网上进行展示&#xff0c;吸引人们为其付钱。互联网发展到今天&#xff0c;我们可以看到它各方面已经逐渐完善了&#xff0c;但曾经在互联网上的不花钱的知识&#xff0c;在今天却要为其花费金钱。在此基础上&a…

CCSA TC1演讲分享 | 全域智能,构建平台化生态

日前&#xff0c;中国通信标准化协会&#xff08;CCSA&#xff09;成功召开互联网与应用技术工作委员会&#xff08;TC1&#xff09;第四十次全会&#xff0c;全会期间&#xff0c;TC1 WG7 IT内控与审计技术标准工作组举办了第3次工作组会议。此次会议重点讨论了各项标准文稿及…

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

微服架构基础设施环境平台搭建 -&#xff08;四&#xff09;在Kubernetes集群基础上搭建Kubesphere平台 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动…

Docker安装及容器安装

Docker安装及容器安装 一、Docker简单介绍 1、Docker是什么 Docker是基于Go语言实现的云开源项目。 Docker是一个开源的应用容器引擎&#xff0c;是容器技术的一种&#xff0c;采用Go编程语言编写。虽然 Docker把容器技术推向了巅峰&#xff0c;但其实&#xff0c;还有其他容…

蓝牙智能升降桌解决方案介绍

传统桌子在办公和学习中具有很大的普及度&#xff0c;但是长时间久坐却会对人体造成可怕的危害。由于不合理的坐姿、长时间久坐等习惯&#xff0c;不仅影响血液循环,让人体感到不适,还会出现视力、颈椎、腰椎、心脏等一系列健康问题。此外&#xff0c;传统桌子通常是固定高度且…

【C++进阶2--多态】面向对象三大特性之一,多种形态像魔法?

今天&#xff0c;带来C多态的讲解。 多态和继承并用&#xff0c;能产生“魔法般的效果”。 *文中不足错漏之处望请斧正&#xff01; 见见多态 是什么 使得父类指针或引用有多种形态。 怎么使它有多种形态呢&#xff1f;咱们先见见猪跑。 见见猪跑 class Base { public:v…

第05章_排序与分页

第05章_排序与分页 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 SELECT last_name, job_id, department_id, hire_date FROM …

Java基础学习(15)

Java基础学习 一、IO流进阶1.1 缓冲流1.1.1字节缓冲流1.1.2 字符缓冲流 1.2 转换流1.3 序列流1.4 反序列化流 /对象操作输入流1.4.1 序列化流/反序列化流的细节汇总 1.5 打印流1.5.1 字节打印流1.5.2 字符打印流 1.6 解压流、压缩流1.7 Commons-io1.8 hutool工具包 一、IO流进阶…

【C#】RemoveAt索引越界问题

系列文章 【C#】单号生成器&#xff08;编号规则、固定字符、流水号、产生业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

使用FFMPEG和SDL2实现音视频同步的简易视频播放器

程序框架 由于之前都是针对FFMPEG某一个功能做的测试和学习。这里我简单做了一个视频播放器&#xff0c;并简单做了音视频同步。在此记录大致过程。 大致框架如下&#xff1a; 主线程 1.加载视频文件&#xff0c;查找音视频流信息 2.初始化音视频解码器 3.初始化SDL并设置…

题解校验码—CRC循环校验码与海明校验码

码距 一个编码系统的码距是任意两个码字的最小距离。 例如个编码系统采用三位长度的二进制编码&#xff0c;若该系统有四种编码分别为&#xff1a;000&#xff0c;011&#xff0c;100&#xff0c;111&#xff0c;此编码系统中000与111的码距为3&#xff1b;011与000的码距为2…

POE:性价比最高的 AI 整合网站

创作不易&#xff0c;如果本文对你有帮助&#xff0c;胖友记得一键三连 &#x1f62d;。更多 AI 优质内容推荐请关注主页 “AI” 专栏&#xff0c;笔者会不定期更新觉得自己用下来还不错的 AI 相关产品。 1.介绍 Poe 是一款同时整合了 ChatGPT、Sage、GPT-4、Claude、Claude-in…

经典神经网络(2)AlexNet及其在Fashion-MNIST数据集上的应用

2、深度卷积神经网络AlexNet ImageNet 数据集&#xff1a;一个开源的图片数据集&#xff0c;包含超过 1400万张图片和图片对应的标签&#xff0c;包含2万多个类别。 自从2010 年以来&#xff0c;ImageNet 每年举办一次比赛&#xff0c;即&#xff1a;ImageNet 大规模视觉识别挑…

数组排序算法

数组排序算法 一、冒泡排序算法二、直接选择排序三、插入排序四、反转排序 一、冒泡排序算法 冒泡排序算法&#xff1a; 类似气泡上涌的动作&#xff0c;会将数据在数组中从小到大或者从大到小不断向前移动。 基本思想&#xff1a; 冒泡排序的基本思想是对比相邻的两个元素值&…