通过beautifulsoup4预防XSS攻击

借助beautifulsoup4将用户输入内容进行过滤

实际使用时需要采用单例模式

步骤:

  1. 实例化对象,对页面进行解析
  2. 查找目标标签
  3. 将非法标签进行清空
  4. 获取处理后字符串
直接操作标签

示例:

content = '''
<div id="i1">
<img src="" id="img">
</div>
<div id="i2"></div>
<script>alert('Hi!')</script>
'''
soup = BeautifulSoup(content, 'html.parser') # <class 'bs4.BeautifulSoup'>
script_tag = soup.find('script') # <class 'bs4.element.Tag'>
script_tag.clear()
script_tag.hidden = True
content = soup.decode() # 将对象转换为一个字符串
print(content)

输出结果:

<div id="i1">
<img src="" id="img">
</div>
<div id="i2"></div>
操作属性

通过.attrs获取属性字典,在字典中进行操作

示例:

content = '''
<div id="i1">
<img src="" id="img">
</div>
<div id="i2"></div>
<script>alert('Hi!')</script>
'''
soup = BeautifulSoup(content, 'html.parser')
img_tag = soup.find('img')
del img_tag.attrs['id']
content = soup.decode()
print(content)

输出结果:

<div id="i1">
<img src="">
</div>
<div id="i2"></div>
<script>alert('Hi!')</script>
设置白名单

示例:

from bs4 import BeautifulSoup

content = '''
<div id="i1">
<img src="" id="img">
</div>
<div id="i2" class="c1"></div>
<script>alert('Hi!')</script>
'''
tag_p = {
# 允许使用的标签和允许的属性
'div': ['class', ],
'img': ['src', ],
}
soup = BeautifulSoup(content, 'html.parser') # <class 'bs4.BeautifulSoup'>
# 开始过滤
for tag in soup.find_all():
if tag.name in tag_p:
pass
else: # 不在白名单中的标签进行清除
tag.hidden = True
tag.clear()
continue for k in list(tag.attrs.keys()): # 注意要先将dict.keys转换成列表
if k in tag_p[tag.name]:
pass
else:
del tag.attrs[k] content = soup.decode()
print(content)

输出结果:

<div>
<img src=""/>
</div>
<div class="c1"></div>
方法

findChildren = findAll = find_all

findChild = find = find_all[0]

tag.clear 将选定标签中内容清空(标签还在)

tag.hidden = True 将标签去掉(内容还在)

tag.attrs 获取一个字典,key: value

通过 Beautiful Soup 4 预防 XSS 攻击的更多相关文章

  1. 如何让Asp.net Web Api全局预防Xss攻击

    一.概述 二.什么是XSS 三.预防方法 四.在WebApi中如何实现 在实现之前,需要了解ASP.NET WEB API的pipeline机制. 如上,可以采用多种方式进行参数的过滤 1.重写Del ...

  2. Web Api全局预防Xss攻击

    本文转载自https://www.cnblogs.com/ruanyifeng/p/4739807.html.对第二种过滤方法的代码进行了一些修改和注释,记录一下免得以后忘了.已经测试过,应该可以直接 ...

  3. Python Beautiful Soup 4

    Beautiful Soup 是一个灵活方便的网页解析库,利用它不用编写正则表达式即可方便地提取的网页信息 官方文档:https://www.crummy.com/software/Beautiful ...

  4. BBS--后台管理页面,编辑文章,xss攻击

    1 1.对文章进行增删改查 # 后台管理url re_path(r'^cn_backend/$', views.cn_backend, name='cn_backend'), re_path(r'^c ...

  5. 8 功能6:后台管理页面,编辑文章,xss攻击

    1.后台管理页面之文本编辑 # 后台管理url re_path(r'^cn_backend/$', views.cn_backend, name='cn_backend'), re_path(r'^c ...

  6. HtmlEncode和JavaScriptEncode(预防XSS)

    在数据添加到DOM时候,我们可以需要对内容进行HtmlEncode或JavaScriptEncode,以预防XSS攻击. JavaScriptEncode 使用“\”对特殊字符进行转义,除数字字母之外 ...

  7. 来自内部的XSS攻击的防范

    来自内部的XSS攻击的防范 引入:前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击. 实践:其实从 http://www.2cto ...

  8. XSS研究2-来自内部的XSS攻击的防范

    引入: 前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击.   实践:  http://www.cnblogs.com/crazy ...

  9. .Net Core 项目中添加统一的XSS攻击防御过滤器

    一.前言 最近公司内部在对系统的安全进行培训,刚好目前手里的一个.net core 项目中需要增加预防xss的攻击,本文将大概介绍下何为XSS攻击以及在项目中如何统一的预防XSS攻击. 二.XSS简介 ...

随机推荐

  1. echars line 底部图例强制不换行(滚动),修改图例样式

    { grid: { left: '5px', right: '10px', top: '10px', bottom: '40px', containLabel: true }, tooltip: { ...

  2. [题解向] PAM简单习题

    \(1\) LG5496 [模板]回文自动机 对于 \(s\) 的每个位置,请求出以该位置结尾的回文子串个数. \(|s|\leq 1e6\) 然后就是PAM的板子题咋感觉好像没有不是很板的PAM题呢 ...

  3. django--中运行scrapy框架

    1.新建一个django项目, 2.前端展示一个按钮 <form action="/start/" method="POST"> {% csrf_t ...

  4. Tree-Shaking性能优化实践 - 原理篇

    Tree-Shaking性能优化实践 - 原理篇   一. 什么是Tree-shaking 先来看一下Tree-shaking原始的本意 上图形象的解释了Tree-shaking 的本意,本文所说的前 ...

  5. 源码学习之Spring (系统架构简单解析)

    Spring Framework 系统架构总览图 Spring Framework的模块依赖关系图 Spring Framework各个模块功能说明 Spring核心模块 模块名称 主要功能 Spri ...

  6. 融云技术分享:融云安卓端IM产品的网络链路保活技术实践

    本文来自融云技术团队原创分享,原文发布于“ 融云全球互联网通信云”公众号,原题<IM 即时通讯之链路保活>,即时通讯网收录时有部分改动. 1.引言 众所周知,IM 即时通讯是一项对即时性要 ...

  7. Leetcode练习题Search Insert Position

    Question: Given a sorted array and a target value, return the index if the target is found. If not, ...

  8. 基于Node 的http转发demo,项目中请使用express+http-proxy-middleware

    var http = require("http"); var data = ''; function getData() { const options = { host: 'w ...

  9. Leakcanary原理浅析

    LeakCanary是Android内存泄漏的框架,作为一个"面试常见问题",它一定有值得学习的地方,今天我们就讲一下它.作为一名开发,我觉得给人讲框架或者库的原理,最好先把大概思 ...

  10. WPF图片,DataGrid等实现圆角

    <Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid.Ro ...