为了账号安全,请及时绑定邮箱和手机立即绑定

从Python字符串中删除不在允许列表中的HTML标记

/ 猿问

从Python字符串中删除不在允许列表中的HTML标记

喵喔喔 2019-08-24 17:42:50

从Python字符串中删除不在允许列表中的HTML标记

我有一个包含文本和HTML的字符串。我想删除或以其他方式禁用某些HTML标记,例如<script>,允许其他人,以便我可以安全地在网页上呈现它。我有一个允许的标签列表,如何处理字符串以删除任何其他标签?



查看完整描述

3 回答

?
一只甜甜圈

这是使用BeautifulSoup的简单解决方案:

from bs4 import BeautifulSoupVALID_TAGS = ['strong', 'em', 'p', 'ul', 'li', 'br']def sanitize_html(value):

    soup = BeautifulSoup(value)

    for tag in soup.findAll(True):
        if tag.name not in VALID_TAGS:
            tag.hidden = True

    return soup.renderContents()

如果你想删除无效的标签的内容,以及,替代tag.extract()tag.hidden

您也可以考虑使用lxmlTidy


查看完整回答
反对 回复 2019-08-24
?
牛魔王的故事

Bleach通过更有用的选项做得更好。它建立在html5lib上,可以投入生产。查看该bleack.clean功能的文档。它的默认配置会转义不安全的标签,例如<script>允许使用有用的标签<a>


import bleach
bleach.clean("<script>evil</script> <a href='http://example.com'>example</a>")# '&lt;script&gt;evil&lt;/script&gt; <a href="http://example.com">example</a>'


查看完整回答
反对 回复 2019-08-24
?
尚方宝剑之说

我使用FilterHTML。它很简单,允许您定义一个控制良好的白名单,擦除URL,甚至匹配正则表达式的属性值或每个属性具有自定义过滤功能。如果小心使用它可能是一个安全的解决方案。以下是自述文件的简化示例:

import FilterHTML# only allow:#   <a> tags with valid href URLs#   <img> tags with valid src URLs and measurementswhitelist = {
  'a': {
    'href': 'url',
    'target': [
      '_blank',
      '_self'
    ],
    'class': [
      'button'
    ]
  },
  'img': {
    'src': 'url',
    'width': 'measurement',
    'height': 'measurement'
  },}filtered_html = FilterHTML.filter_html(unfiltered_html, whitelist)


查看完整回答
反对 回复 2019-08-24

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信