首页> 中国专利> 富文本过滤方法、富文本过滤装置、计算机可读存储介质

富文本过滤方法、富文本过滤装置、计算机可读存储介质

摘要

本发明提供一种富文本过滤方法、富文本过滤装置、计算机可读存储介质。一种富文本过滤方法,其中,获取富文本的字符串,将字符串解析成包括标签数据和内容的对象,遍历对象节点,当前遍历对象节点为标签数据时,针对所述标签数据进行过滤,当前遍历对象节点为内容时,针对所述内容进行转义,遍历完所有的对象节点之后,将针对所述标签数据进行过滤并针对所述内容进行转义之后的对象重新组合成用于表示富文本的字符串。

著录项

  • 公开/公告号CN112883688A

    专利类型发明专利

  • 公开/公告日2021-06-01

    原文格式PDF

  • 申请/专利权人 中国电信股份有限公司;

    申请/专利号CN201911200307.5

  • 发明设计人 郭望纾;

    申请日2019-11-29

  • 分类号G06F40/14(20200101);G06F40/154(20200101);G06F21/56(20130101);

  • 代理机构11038 中国贸促会专利商标事务所有限公司;

  • 代理人李今子

  • 地址 100033 北京市西城区金融大街31号

  • 入库时间 2023-06-19 11:11:32

说明书

技术领域

本发明涉及安全领域,用于防止富文本被跨站脚本攻击(XSS)的技术。

背景技术

与普通文本输入不同,富文本编辑器允许用户嵌入标签和样式来提供丰富的格式设置,使得文字输出更为美观和有层次感。

当前防止跨站脚本攻击的方式大多是采用标签过滤,黑名单去除关键字或者字符转义的方式进行防御,并没有单独针对富文本进行跨站脚本攻击的成体系的防御方式。

现有方法的防止跨站脚本攻击的方式存在以下问题:对于富文本而言直接进行转义会使富文本本身失去效果;而单双引号一般不会被转义,这具有被攻击者利用的可能性;另外,标签过滤大多数情况都是黑名单过滤,存在绕过可能性。

发明内容

针对上述问题,本发明提供一种富文本过滤方法,在保留富文本样式和内容的同时,实现过滤针对富文本的跨站脚本攻击。

根据本发明的一方面,提供一种富文本过滤方法,其中,获取富文本的字符串,将字符串解析成包括标签数据和内容的对象,遍历对象节点,当前遍历对象节点为标签数据时,针对所述标签数据进行过滤,当前遍历对象节点为内容时,针对所述内容进行转义,遍历完所有的对象节点之后,将针对所述标签数据进行过滤并针对所述内容进行转义之后的对象重新组合成用于表示富文本的字符串。

优选为,在将字符串解析成包括标签数据和内容的对象时,删除不符合富文本语法的字符串。

优选为,预先设置标签白名单列表,针对所述标签数据进行过滤包括:针对所述标签数据中的标签进行过滤,以保留存在于所述标签白名单列表中的标签所在的标签数据,并删除不存在于所述标签白名单列表中的标签所在的标签数据。

优选为,预先设置属性白名单列表,当针对所述标签数据进行过滤之后的标签数据中包括属性时,针对属性进行过滤,以保留存在于所述属性白名单列表中的属性以及该属性的值,并删除不存在于所述属性白名单列表中的属性以及该属性的值。

优选为,预先设置表示属性的值的规则,从所保留的属性的值中,删除不符合所述表示属性的值的规则的属性的值。

优选为,当针对所述标签数据进行过滤之后的标签数据中包括内容时,针对所述内容进行转义。

优选为,针对所述内容进行转义包括:针对所述内容中的能够被浏览器解析而执行的符号进行转义。

根据本发明的另一方面,提供一种富文本过滤装置,包括:获取单元,获取富文本的字符串;解析单元,将字符串解析成包括标签数据以及内容的对象;过滤单元,针对通过所述解析单元解析得到的对象中包括的标签数据进行过滤;内容转义单元,针对通过所述解析单元解析得到的对象中包括的内容进行转义;以及重组单元,将通过所述过滤单元过滤之后的对象和通过所述内容转义单元内容转义之后的对象,重新组合成用于表示富文本的字符串。

优选为,所述解析单元在将字符串解析成包括标签数据以及内容的对象时,删除不符合富文本语法的字符串。

优选为,所述富文本过滤装置还包括:标签白名单列表保存单元,用于保存标签白名单列表,所述过滤单元包括:第一过滤单元,针对所述标签数据中包含的标签进行过滤,以保留存在于所述标签白名单列表中的标签所在的标签数据,并删除不存在于所述标签白名单列表中的标签所在的标签数据。

优选为,所述富文本过滤装置还包括:属性白名单列表保存单元,用于保存属性白名单列表,所述过滤单元包括:第二过滤单元,当针对所述标签数据进行过滤之后的标签数据中包含属性时,对所述属性进行过滤,以保留存在于所述属性白名单列表中的属性以及该属性的值,并删除不存在于所述属性白名单列表中的属性以及该属性的值。

优选为,所述过滤单元包括:第三过滤单元,从所述第二过滤单元所保留的属性的值中,保留符合表示属性的值的规则的属性的值,删除不符合所述表示属性的值的规则的属性的值。

优选为,当针对所述标签数据进行过滤之后的标签数据中包含内容时,所述内容转义单元对所述内容进行转义。

优选为,所述内容转义单元针对内容中的能够被浏览器解析而执行的符号进行转义。

根据本发明的又一方面,提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述富文本过滤方法的步骤。

根据本发明,在服务端获取富文本的时候自动执行富文本过滤,在保留富文本样式和内容的同时,实现过滤针对富文本的跨站脚本攻击。此外,还可以通过修改白名单的方式,自定义添加规则进行定制化的过滤。

根据本发明提出的富文本过滤方法,解决了现有的黑名单需要大量策略、需要经常更新策略、无法提前防御、与富文本字符串的兼容等问题,可通过修改富文本编辑器的服务端接收函数代码,或使用hook钩子的方式绑定在接收函数上,实现过滤富文本字符串中的跨站脚本攻击,提升网站或应用的安全性。

附图说明

图1示出本发明的一个实施方式所涉及的富文本过滤方法的流程图。

图2示出富文本过滤方法的具体实施例。

图3示出解析出的对象结构的例子。

图4为本发明实施方式的富文本过滤装置的结构图。

图5示出XSS攻击代码的例子。

图6示出对XSS攻击代码进行富文本字符串解析之后得到的代码。

图7示出对标签和属性进行过滤之后得到的代码。

图8示出对标签和属性进行过滤之后得到的代码进行内容转义之后的代码。

图9示出对属性的值进一步进行过滤之后得到的代码。

具体实施方式

下面结合附图详细说明用于实现本发明的实施方式。

图1示出本发明的一个实施方式所涉及的富文本过滤方法的流程图。

步骤S1,获取富文本的字符串。

步骤S2,将字符串解析成包括标签数据和内容的对象。

其中,标签数据至少包括标签,标签数据还可以包括属性和/或内容,属性可以包括属性的值。

在对字符串进行解析时,根据富文本语法进行解析。关于字符串的解析方式不做任何限制,可以采用现有的解析方式,例如可以根据HTML语法进行解析。作为一例,可以参照浏览器解析富文本字符串的规则,模拟浏览器的解析方式,将富文本字符串解析成包含标签数据和内容的对象。

作为优选的实施方式,在解析字符串时,无法解析的部分可以直接过滤,即可以删除不符合富文本语法的字符串。通过此方式,可过滤攻击者故意写在规则外的恶意内容。

步骤S3,遍历对象节点,如果对象节点是标签数据,则进入到步骤S4,如果对象节点是内容,则进入到步骤S5。

步骤S4,针对所述对象中包括的标签数据进行过滤。

在本步骤S4中,首先对标签数据中的标签进行过滤。在本发明实施方式中,通过白名单方式过滤标签。具体而言,例如预先设置标签白名单列表,保留存在于标签白名单列表中的标签,删除不存在于标签白名单列表中的标签。如果标签数据中除了标签还包括属性/内容,则在删除不存在于标签白名单列表中的标签时,将该标签所在的标签数据中的属性/内容也删除。

当标签数据中除了标签还包括属性时,在对标签进行过滤之后进一步对属性进行过滤。在本发明实施方式中,也可以通过白名单方式过滤属性。具体而言,预先设置属性白名单列表,保留存在于属性白名单列表中的属性,删除不存在于属性白名单列表中的属性。当删除不存在于属性白名单列表中的属性时,将属性的值也删除。

在对属性进行过滤之后,还需要进一步对属性的值进行过滤。在本发明实施方式中,预先设置表示属性的值的规则,如果属性的值符合表示属性的值的规则,则保留该属性的值,如果属性的值不符合表示属性的值的规则,则删除该属性的值。

所述标签白名单列表和属性白名单列表可以是默认的列表,还可以是由用户自定义的列表。关于标签白名单列表和属性白名单列表的形式不做任何限定,可以采用白名单规则树的形式。

通过此步骤,可过滤利用标签、属性进行攻击的恶意内容。

当标签数据中除了标签还包括内容时,在对标签进行过滤之后对内容进行转义。针对标签数据中包含的内容的转义方式同步骤S5中的针对标签数据外的内容进行的转义方式,在此省略其说明。

步骤S5,针对所述对象中包括的内容进行内容转义。

在针对内容进行转义时,针对内容中的能够被浏览器解析而执行的符号(例如包括单双引号在内的特殊字符)进行转义。

富文本对象中的文字内容本身其实不需要经过浏览器解析,故将内容中的包括单双引号在内的特殊字符进行强制转义,在保证内容输出的准确性的同时,使内容中的攻击部分不会被浏览器解析。

步骤S6,将针对标签数据进行过滤并针对内容进行转义之后的对象,重新组合成富文本字符串。在本步骤S6中,采用与步骤S2中的解析方式对应的方式进行重新组合。

当然,在重新组合成富文本字符串之前,还可以针对通过针对标签数据进行过滤和针对内容进行内容转义之后得到的对象进一步进行过滤,删除由于前面步骤的过滤之后重新拼接产生的恶意内容,以防止通过步骤S4不能解决的跨站脚本攻击。

通过本发明实施方式的富文本过滤方法,在服务端获取富文本的时候自动执行过滤,在保留富文本样式和内容的同时,过滤针对富文本的跨站脚本攻击。

另外,在本发明中,并不限定对属性进行过滤和对内容进行转义的先后顺序,俩者也可以并行进行,也可以先对属性进行过滤之后,再对内容进行转义,或者也可以先对内容进行转义之后,再对属性进行过滤。

另外,在本发明中,可以在对所有的属性进行过滤之后对属性的值进行过滤,也可以在对各属性进行过滤的同时进行相应的属性的值的过滤。另外,并不限定对属性的值进行过滤和对内容进行转义的先后顺序,俩者也可以并行进行,也可以先对属性的值进行过滤之后,再对内容进行转义,或者也可以先对内容进行转义之后,再对属性的值进行过滤。

图2示出富文本过滤方法的具体实施例。

步骤S201,获取富文本字符串。

步骤S202,将字符串解析为对象。

在解析字符串时,无法解析的部分可以直接过滤,即可以删除不符合富文本语法的字符串。

在本实施例中,解析出的对象结构例如可以表示为图3所示。

步骤S203,遍历对象节点。

步骤S204,判断当前遍历节点是否为标签,如果是,则进入到步骤S205,否则进入到步骤S207。

步骤S205,判断标签是否存在于标签白名单列表内,如果是,则进入到步骤S203,继续遍历下一个对象节点,否则,进入到步骤S206。

步骤S206,删除标签节点,然后进入到步骤S203,继续遍历下一个对象节点。在删除标签节点时,将与该标签有关的属性和内容也删除。

步骤S207,判断当前遍历节点是否为属性,如果是,则进入到步骤S208,否则进入到步骤S2012。

步骤S208,判断属性是否存在于属性白名单列表内,如果是,则进入到步骤S2010,否则进入到步骤S209。

步骤S209,删除属性节点,然后进入到步骤S203,继续遍历下一个对象节点。在删除属性节点时,将该属性的属性值也删除。

步骤S2010,判断该属性的属性值是否符合预定规则,如果是,则进入到步骤S203,继续遍历下一个对象节点,否则,进入到步骤S2011。其中,预定规则是表示属性的属性值的规则。

步骤S2011,删除属性值,然后进入到步骤S203,继续遍历下一个对象节点。

步骤S2012,判断当前遍历节点是否为内容,如果是,则进入到步骤S2013,否则进入到步骤S2015。

步骤S2013,判断当前内容是否为子节点,如果是,则进入到步骤S203,继续遍历该子节点,否则进入到步骤S2014。

步骤S2014,对内容进行转义,针对内容中的能够被浏览器解析而执行的符号(例如包括单双引号在内的特殊字符)进行转义。

步骤S2015,判断是否遍历完所有的对象节点,如果是,则进入到步骤S2016,否则进入到步骤S203,继续遍历下一个对象节点。

步骤S2016,将遍历完所有的对象节点之后得到的对象重新组合成富文本字符串。

上述图2所示的实施例是实现富文本过滤方法的一个具体例,富文本过滤方法的步骤顺序并不限于图2所示的顺序。

图4为本发明实施方式的富文本过滤装置的结构图。

如图4所示,富文本过滤装置400可以包括处理电路401,该处理电路401被配置为执行本发明实施方式的富文本过滤方法的流程。例如,该处理电路401可以包括:获取单元B1,获取富文本的字符串;解析单元B2,将字符串解析成包括标签数据以及内容的对象;过滤单元B3,针对通过所述解析单元B2解析得到的对象中包括的标签数据进行过滤;内容转义单元B4,针对通过所述解析单元B2解析得到的对象中包括的内容进行转义;重组单元B5,将通过所述过滤单元B3过滤之后的对象和通过所述内容转义单元B4内容转义之后的对象,重新组合成用于表示富文本的字符串。

所述解析单元B2在将字符串解析成包括标签数据以及内容的对象时,删除不符合富文本语法的字符串。

富文本过滤装置400还包括:标签白名单列表保存单元402,用于保存标签白名单列表;属性白名单列表保存单元403,用于保存属性白名单列表。在本实施方式中示出了白名单列表保存单元分为标签白名单列表保存单元和属性白名单列表保存单元,但也可以在一个保存单元中保存标签白名单列表和属性白名单列表。

所述过滤单元B3还可以进一步包括:第一过滤单元B31,针对所述标签数据中包含的标签进行过滤,以保留存在于所述标签白名单列表中的标签所在的标签数据,并删除不存在于所述标签白名单列表中的标签所在的标签数据;第二过滤单元B32,当针对所述标签数据进行过滤之后的标签数据中包含属性时,对所述属性进行过滤,以保留存在于所述属性白名单列表中的属性以及该属性的值,并删除不存在于所述属性白名单列表中的属性以及该属性的值;第三过滤单元B33,从所述第二过滤单元B32所保留的属性的值中,保留符合表示属性的值的规则的属性的值,删除不符合所述表示属性的值的规则的属性的值。

当针对所述标签数据进行过滤之后的标签数据中包含内容时,所述内容转义单元B4对所述内容进行转义。所述内容转义单元B4针对内容中的能够被浏览器解析而执行的符号进行转义。

需要说明的是,富文本过滤装置的处理电路401可以指在计算系统中执行功能的数字电路系统、模拟电路系统或混合信号(模拟和数字的组合)电路系统的各种实现。处理电路可以包括例如诸如集成电路(IC)、专用集成电路(ASIC)这样的电路、单独处理器核心的部分或电路、整个处理器核心、单独的处理器、诸如现场可编程门阵列(FPGA)的可编程硬件设备、和/或包括多个处理器的系统。

在一些实施例中,富文本过滤装置还可以包括存储器(均未图示)。富文本过滤装置的存储器可以存储由各自的处理电路产生的信息以及用于各自的处理电路操作的程序和数据。存储器可以是易失性存储器和/或非易失性存储器。例如,存储器可以包括但不限于随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、只读存储器(ROM)以及闪存存储器。

另外,富文本过滤装置可以以芯片级来实现,或者也可以通过包括其它外部部件而以设备级来实现。

应当理解,富文本过滤装置的处理电路401中示出的各个单元仅是根据所实现的具体功能所划分的逻辑模块,而不是用于限制具体的实现方式。在实际实现时,上述各个单元可被实现为独立的物理实体,或者也可以由单个实体(例如,处理器(CPU或DSP等)、集成电路等)来实现。

本领域技术人员应当知道,本发明被实施为一系统、装置、方法或作为计算机程序产品的计算机可读介质。因此,本发明可以实施为各种形式,例如完全的硬件实施例、完全的软件实施例(包括固件、常驻软件、微程序代码等),或者也可实施为软件与硬件的实施形式,在以下会被称为“电路”、“模块”或“系统”。此外,本发明也可以任何有形的介质形式实施为计算机程序产品,其具有计算机可使用程序代码存储于其上。

本发明的相关叙述参照根据本发明具体实施例的系统、装置、方法及计算机程序产品的流程图和/或框图来进行说明。可以理解每一个流程图和/或框图中的每一个块,以及流程图和/或框图中的块的任何组合,可以使用计算机程序指令来实施。这些计算机程序指令可供通用型计算机或特殊计算机的处理器或其它可编程数据处理装置所组成的机器来执行,而指令经由计算机或其它可编程数据处理装置处理以便实施流程图和/或框图中所说明的功能或操作。

在附图中显示根据本发明的各种实施例的系统、装置、方法及计算机程序产品可实施的架构、功能及操作的流程图及框图。因此,流程图或框图中的每个块可表示一模块、区段、或部分的程序代码,其包括一个或多个可执行指令,以实施指定的逻辑功能。另外应当注意,在某些其它的实施例中,块所述的功能可以不按图中所示的顺序进行。举例来说,两个图示相连接的块事实上也可以同时执行,或根据所涉及的功能在某些情况下也可以按图标相反的顺序执行。此外还需注意,每个框图和/或流程图的块,以及框图和/或流程图中块的组合,可藉由基于专用硬件的系统来实施,或者藉由专用硬件与计算机指令的组合,来执行特定的功能或操作。

下面举出对XSS攻击代码进行过滤的例子。图5示出XSS攻击代码的例子。在该例子中示出了攻击代码包括1~25行。

图6示出对XSS攻击代码进行富文本字符串解析之后得到的代码。在本例子中,图5中的第1~6、24、25行由于写在最外层标签之外,被视为不符合富文本语法,图5中的第22行由于不符合富文本语法的表达方式,也被视为不符合富文本语法,因此,在进行富文本字符串解析时,图5中的第1~6、22、24、25行都被删除,得到了图6所示的代码。

另外,在本例子中,将写在最外层标签之外的内容视为不符合富文本语法而在解析富文本字符串时删除。但也可以采用如下方式,即,在解析富文本字符串时仅删除写在最外层标签之外的不符合富文本语法的内容,不删除写在最外层标签之外的符合富文本语法的内容,针对该写在最外层标签之外的符合富文本语法的内容进行转义,由此使写在最外层标签之外的符合富文本语法的内容中的攻击部分不会被浏览器解析。

在本例子中,例如,标签白名单列表中包括body、a、div、img……等标签,属性白名单列表中包括href、style、src、class……等属性。

图7示出基于上述标签白名单列表和属性白名单列表对标签和属性进行过滤之后得到的代码。

图8示出对标签和属性进行过滤之后得到的代码进行内容转义之后的代码。如图8所示,图7中的第3行的双引号被内容转义。

图9示出对属性的值进一步进行过滤之后得到的代码。在本例子中,javascript:alert(3)、vbscript:MsgBox(5)、expression(alert(7))不符合属性值的表达方式,因此被删除。

上述例子中,在对标签和属性进行过滤之后,对内容进行转义,最后对属性的值进行了过滤,但过滤顺序不限于此,也可以在对标签和属性进行过滤之后,先对属性的值进行过滤,然后再对内容进行转义。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号