xss清理:清理不受信任的HTML以防止XSS攻击

[bsd2型,图书馆,网状物][建议标签]

通过文本运行不受信任的HTML。HTML格式。消毒XSS。消毒XSS以防止XSS攻击。参见README.mdhttp://github.com/yesodweb/haskell-xss-sanitize有关更多详细信息


[跳到自述]

下载

注意:此软件包具有元数据修订在阴谋集团的描述中比tarball中包含的要新。要打开包括修订版在内的包装,请使用“cabal get”。

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS(RSS)] 0.1,0.1.1,0.2.0,0.2.1,0.2.2,0.2.3,0.2.4,0.2.5,0.2.6,0.3.0,0.3.0.1,0.3.1,0.3.1.1,0.3.2,0.3.3,0.3.4,0.3.4.1,0.3.4.2,0.3.5,0.3.5.1,0.3.5.2,0.3.5.3,0.3.5.4,0.3.5.5,0.3.5.6,0.3.5.7,0.3.6,0.3.7,0.3.7.1,0.3.7.2
更改日志 更改日志.md
依赖关系 阿托帕塞克(>=0.10.0.3 && <1),基础(>=4.9.1 && <5),容器,css文本(>=0.1.1 && <0.2),网络-美国(>=2.6),塔格汤(>=0.12.2 && <1),文本(>=0.11 && <2.2),utf8-字符串(>=0.3 && <1.1)[细节]
许可证 BSD-2条款
作者 格雷格·韦伯<greg@gregweber.info>
维护人员 迈克尔·斯诺曼<michael@snoyman.com>
修订过的 第1次修订制造商安德烈亚斯·阿贝尔2023-10-13T18:52:55Z
类别 网状物
主页 https://github.com/yesodweb/haskell-xss-sanitize#自述文件
Bug跟踪器 https://github.com/yesodweb/haskell-xss-sanitize/issues
源回购 头部:git克隆https://github.com/yesodweb/haskell-xss-sanitize网站
已上传 通过MichaelSnoyman先生2023-04-01T17:04:24Z
分配 架构(architecture):0.3.7.2,借方:0.3.6,费多拉:0.3.7.2条,免费BSD:0.3.5.6,LTSHaskell公司:0.3.7.2,NixOS:0.3.7.2,堆叠:0.3.7.2,openSUSE(打开SUSE):0.3.7.2
反向依赖关系 16直接,126间接[细节]
下载 总计90872(过去30天内为100)
额定值 (尚未投票)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上一次成功报告于2023-04-01[所有1个报告]

xss-sanitize-0.3.7.2自述文件

[返回包描述]

总结

测验

xss-sanitize允许您通过白名单过滤来自不可信源的html。白名单过滤相当全面,包括在样式属性中支持css,但也有以下列举的限制。

清理允许web应用程序安全地使用富文本编辑器,允许在注释中使用html,或以其他方式显示不受信任的html。

如果你信任HTML(你写的),你就不需要使用它。如果你不相信html,你可能也不相信标签是平衡的,应该使用sanitizeBalance函数。

用法

在模块文本中提供了2个功能。HTML格式。消毒XSS

  • 清理-过滤html以防止XSS攻击。
  • sanitizeBalance-与sanitize相同,但确保没有单独的打开/关闭标记-有助于防止用户的html扰乱页面

细节

这不是逃跑!转义html确实可以防止XSS攻击。字符串(不是HTML)应该进行HTML转义,以正确显示并防止XSS攻击。然而,转义会破坏实际HTML的显示。

此函数用于删除任何不在其白名单中的HTML标记或属性。这听起来可能很挑剔,但大多数HTML都应该保持不变,这样用户就不会注意到这个过程,但我们可以使用安全的HTML。

集成

建议将其集成,以便在应用程序收到不受信任的html数据时自动使用(而不是在显示之前)。以Yesod web框架为例。

限制

小写字母

为了方便起见,所有标记名和属性名都转换为小写。如果您有一个不希望这样做的用例,请告诉我。

平衡-消毒平衡

此函数的目标是防止在(未知)html中放置不平衡标记时,html被破坏。我希望它在实践中能很好地工作,除非您有其他方法,否则不会看到使用它的缺点。然而,此函数根本不能保证有效的html。事实上,平衡的结果很可能仍然是无效的HTML。无法保证浏览器将如何显示无效的HTML,因此无法保证此函数将保护您的HTML不被用户的HTML破坏。其他可能的方法是通过libxml2这样的理解HTML的库来运行HTML,或者首先在页面底部的隐藏iframe或隐藏div中呈现HTML,以便将其隔离,然后使用JavaScript将其插入到所需的页面中。

TagSoup分析程序

TagSoup用于解析HTML,它做得很好。然而,TagSoup并没有保留所有空白。TagSoup不区分以下情况:

<a href=“foo”>,<a href=foo><a href><a></a>,<a/>

在第三种情况下,img和br标记将作为单个自闭标记输出。其他自动关闭标签将作为打开和关闭对输出。所以<img>或<img><img>转换为<img/>、和<a></a>或<a/>转换为<a></a>。计划对TagSoup进行未来更新,以便TagSoug能够呈现与解析时完全相同的标记。

安全

白名单从哪里来?

归根结底,这就是您的安全来源。我希望有缺陷的白名单会起到强大的威慑作用,但这个库力求正确。

这个html5lib的源代码是白名单和我的实现参考的来源。如果您觉得白名单中缺少标签,请检查是否已将其添加到白名单中。

如果有人知道更好的来源或认为某个特定的标记/属性/值可能容易受到攻击,请告诉我。HTML净化器如果您想添加任何内容,则会有一个更宽松、可配置(但安全)的白名单。

代码从哪里来?

原始代码取自John MacFarlane的Pandoc(经许可),但由Greg Weber进行了修改,以提高速度,使用TagSoup重新解析,并使用html5lib的白名单。Michael Snoyman添加了平衡标签功能,并专门发布了css-text以帮助进行css解析。html5lib的sanitizer.py用作参考实现,并且大多数代码看起来应该相同。css解析是不同的:如前所述,我们使用css解析器,而不是像html5lib这样的正则表达式。

样式属性

样式属性现在使用css-text和autoparsec-text依赖项进行解析。然后对属性和关键字的白名单进行检查。空白不被保留。此代码再次从sanitizer.py转换而来,但使用attoparsec而不是regex。如果您不关心剥离css,可以使用此库的早期<0.3版本来避免attoparsec依赖性。

数据属性

数据属性不在白名单上。href和style属性是白名单,但其值也必须通过白名单。这也是数据属性的工作方式。

svg和mathml

mathml白名单已完全实现。有一些对svg样式的支持。svg元素和属性有一个完整的白名单。然而,有些元素没有包括在内,因为它们需要进一步过滤(就像数据属性一样),而这还没有完成。