当前位置: 首页 > news >正文

【Python常用库_1】网络安全清洁专家——Bleach

前言

😊😊😊欢迎来到本博客😊😊😊

🌟🌟🌟 本专栏主要分享常用的一些Python库,让工作学习事半功倍,适用于平时学习、工作快速查询等,随时更新。

😊😊😊 具体食用方式:可以点击本专栏【Python库快捷查找】–>搜索你要查询的Python库名,或者通过本篇博客查阅你想知道的知识,即可食用。

🎁🎁🎁支持:如果觉得博主的文章还不错或者您用得到的话,可以悄悄关注一下博主哈,如果三连收藏支持就更好啦!这就是给予我最大的支持!😙😙😙


文章目录

    • 学习目标
    • 一、认识Bleach库
    • 二、学习Bleach库
      • 2.1 安装Bleach库
      • 2.2 清理HTML
      • 2.3 标记(签)过滤
      • 2.4 属性过滤
      • 2.5 脱敏链接
      • 2.6 自定义过滤
    • 三、总结

学习目标

  • 认识Bleach库
  • 学习Bleach库
  • 使用(玩转)Bleach库

一、认识Bleach库

  跨站脚本攻击(XSS)是一种常见而严重的安全威胁,它允许攻击者将代码注入到网页上,这些代码可以被其他用户或访问者执行。XSS 攻击的目的通常是为了盗取用户数据、盗窃cookie、重定向用户或者操作用户浏览器。

  我们可以使用Python库Bleach,它能够删除或转义 HTML 中的非法字符和标签,防止网站受到 XSS(跨站脚本

  Bleach 不仅可以清理 HTML 文档,还能够对链接进行处理,检查是否是合法格式,并可以使用白名单来控制哪些 HTML 标签、属性是安全的,因此非常适合用于清洁用户输入的数据,确保网站安全。

  Bleach 是一个轻量级且易于使用的库,它能够直接与 HTML5lib 配合使用,在处理各种复杂并且不标准的 HTML 数据时更加得心应手。同时,它提供了丰富的自定义选项,以满足不同场景下的安全需求,非常适合在 Web 应用程序中使用。


二、学习Bleach库

2.1 安装Bleach库

  Bleach库的安装和其他库安装一样,用pip命令即可:

pip install bleach
pip install bleach -i https://pypi.tuna.tsinghua.edu.cn/simple  #清华源会更快

2.2 清理HTML

dirty_html = "<script>alert('XSS Attack!')</script><p>Clean HTML</p>"
clean_html = bleach.clean(dirty_html)
print(clean_html)

  解析: bleach 是一个用于清理 HTML 内容的库,它会将不被允许的标签和属性转义为 HTML 实体。例如,<script> 标签会被转义为 &lt;script&gt;,这可以防止这些标签被浏览器执行。<p> 标签被认为是安全的,所以它会被保留,但标签的尖括号也会被转义为 HTML 实体。

  因此,bleach.clean(dirty_html) 的输出是转义后的 HTML 内容,这样可以确保在显示时不会执行潜在的恶意脚本。转义后的 HTML 内容就是:

&lt;script&gt;alert('XSS Attack!')&lt;/script&gt;&lt;p&gt;Clean HTML&lt;/p&gt;

  bleach 将 <script> 标签和 </script> 标签转义成了 &lt;script&gt;&lt;/script&gt;,从而阻止了可能的 XSS 攻击。<p> 标签被保留,但同样也被转义了。

2.3 标记(签)过滤

  上面在清理时,将<p>也进行了转义,在bleach清理HTML过程中,可以允许某些特定的标签:

import bleach
dirty_html = "<script>alert('XSS Attack!')</script><p>Clean HTML</p>"
# 允许的 HTML 标签及熟悉列表
allowed_tags = ['p']
clean_html = bleach.clean(dirty_html, tags=allowed_tags, attributes=attributes)
print(clean_html)

  输出:

&lt;script&gt;alert('XSS Attack!')&lt;/script&gt;<p>Clean HTML</p>

  解析: 这样就只保留了标签<p>

2.4 属性过滤

  bleach 还可以过滤 HTML 标记的属性,只保留指定的属性:

import bleach
dirty_html1 = '<a href="javascript:alert(\'XSS\')">Link</a>'clean_html = bleach.clean(dirty_html1, attributes={'a': ['href']})
print(clean_html)

  输出

<a>Link</a>

2.5 脱敏链接

  可以脱敏链接,确保它们的格式是有效的,并可以防止一些危险的 URL 协议:

import bleach
dirty_link = "Click here: <a href='javascript:evilFunction()'>Link</a>"
clean_link = bleach.linkify(dirty_link)
print(clean_link)

  输出:

Click here: <a href="javascript:evilFunction()" rel="nofollow">Link</a>

  解析: bleach.linkify() 识别到 <a> 标签后,它会保留链接,但会增加一个 rel="nofollow" 属性来防止搜索引擎跟踪此链接。尽管它不会直接移除 javascript:,但它会确保链接不会被轻易点击或执行恶意代码,会添加 rel="nofollow" 属性来降低潜在风险。

  为了防止潜在的 XSS 攻击,可以使用 bleach 的 clean 方法,并特别设置不允许 javascript: 协议,或者限制允许的链接协议。以下是一个使用 bleach.clean 的示例,它会移除或转义危险的链接:

import bleachdirty_link = "Click here: <a href='javascript:evilFunction()'>Link</a>"
# 使用 bleach.clean 并限制允许的协议
clean_link = bleach.clean(dirty_link, tags=['a'], attributes={'a': ['href']}, protocols=['http', 'https', 'mailto'])
print(clean_link)

  输出:

Click here: <a>Link</a>

2.6 自定义过滤

from bleach.sanitizer import Cleaner
class MyFilter:def __call__(self, attrs, new=False):# 自定义过滤逻辑return attrs
my_filter = MyFilter()
cleaner = Cleaner(filters=[my_filter])clean_html = cleaner.clean("<custom>Something</custom>")

  使用 Bleach 提供的 Cleaner 类和自定义的过滤器,可以创建自己的清洁流程。


三、总结

  Python Bleach 是一个强大的库,用于安全地处理 HTML 和文本数据,防止 XSS 和其他安全漏洞。

  在本文中,介绍了 Bleach 的基本用法,以及如何安全地处理 HTML。

  Bleach 库作为一个强大的 HTML 清洁和文本转义工具,提供了简单但又强大的接口,帮助开发者清除潜在的 Web 安全威胁,确保用户输入的数据不会造成破坏。

  通过使用 Bleach,可以更专注于创建出色的用户体验,而不必过度担心数据安全问题。


🚶🚶🚶 今天的文章就到这里啦~
喜欢的话,点赞👍、收藏⭐️、关注💟哦 ~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • TiDB-从0到1【完结】
  • 细致刨析JDBC ① 基础篇
  • Windows10 如何配置python IDE
  • Apple Intelligence深夜炸场!苹果发布4颗自研芯片,iPhone/iWatch/AirPods大升级
  • 专业级PDF编辑神器大比拼:效率与功能并重的选择
  • 【日常记录-Java】SpringBoot中使用无返回值的异步方法
  • Docker基础-Docker Compose使用
  • 大数据与人工智能:脑科学与人工神经网络ANN
  • 随手记:uniapp小程序登录方式和小程序使用验证码登录
  • Flutter动画—涟漪效果
  • arcgis Feature Server的新增、更新、删除
  • 使用 Grype 检查 .jar 包中的漏洞
  • Python 调用手机摄像头
  • Flask 第二课 -- 安装
  • 常见文档工具对比和选择
  • .pyc 想到的一些问题
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • vagrant 添加本地 box 安装 laravel homestead
  • 如何用vue打造一个移动端音乐播放器
  • 数据仓库的几种建模方法
  • Prometheus VS InfluxDB
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # Apache SeaTunnel 究竟是什么?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (zt)最盛行的警世狂言(爆笑)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)WCF的Binding模型
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (函数)颠倒字符串顺序(C语言)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)Honghu Cloud云架构一定时调度平台
  • (一)WLAN定义和基本架构转
  • (转)Google的Objective-C编码规范
  • (转)编辑寄语:因为爱心,所以美丽
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .gitignore不生效的解决方案
  • .net 7和core版 SignalR
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 流——流的类型体系简单介绍
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET中GET与SET的用法
  • @Transaction注解失效的几种场景(附有示例代码)
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [Android]使用Android打包Unity工程
  • [AutoSar]BSW_Com02 PDU详解