Django---Xss过滤以及单例模式
Xss过滤
在表单填写的过程中我们就用到textarea,富文本编辑框,里面要用户输入相关的内容。如果有的人想要搞怪,在里面写一些js代码或者修改编辑的时候修改源代码,那提交上去之后就会使得页面显示不正确。这个时候我们就应该要在提交到数据库的时候进行过滤。把js等代码过滤掉或者转义。
python中有一个模块:beautifulsoup4
使用:
content='''
<h1>Xss过滤</h1>
<p><span style="width:100px;" name="haha">在表单填写的过程中我们就用到textarea,富文本编辑框,</span></p>
<p>
<strong>python中有一个模块:</strong>
<script>alert(111)</scripy>
</p>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,"html.parser")
tag = soup.find("script")#找到要找的标签及内容
tag.hidden=True#隐藏标签
tag.clear()#清楚标签中的内容
span = soup.find('span') del span.attrs['style']#获得span里面的style标签 content = soup.decode()
print(content)
使用:
- 首先引入模块from bs4 import BeautifulSoup
- 创建对象,把要过滤的内容和解析器传入,python中有一个内置的解析器html.parser
- 通过soup.find查找到相应的标签内容
- 如果要删除标签就使用:tag.hidden=True
- 如果想要把标签清除:tag.clear
- 如果想要查找标签中的属性:span.attrs ,获得一个字典,如:{'style': 'width:100px;', 'name': 'haha'}
- 如果想要删除标签中某一个属性:del span.attrs['属性名']
- 把对象转换成字符串形式:soup.decode()
上面是找到特殊标签,然后把特殊标签删除,那么我们能不能设置一个白名单,只允许名单内的标签通过,其他的都要过滤?
content='''
<h1>Xss过滤</h1>
<p><span style="width:100px;" name="haha">在表单填写的过程中我们就用到textarea,富文本编辑框,</span></p>
<p>
<strong>python中有一个模块:</strong>
<script>alert(111)</scripy>
</p>
'''
tags = ['p','strong']
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,"html.parser")
for tag in soup.find_all():#tag.name就只标签的名字
if tag.name in tags:
continue
else:
tag.hidden = True
tag.clear()
content = soup.decode()
print(content)
这样我们得到的结果就是除了p标签和strong标签,都没有了

如果要还想要删除p标签中的class选择器,和strong中的id选择器:
content='''
<h1>Xss过滤</h1>
<p class="c1" id="i1"><span style="width:100px;" name="haha">在表单填写的过程中我们就用到textarea,富文本编辑框,</span></p>
<p>
<strong class="c2" id="i2">python中有一个模块:</strong>
<script>alert(111)</scripy>
</p>
'''
# tags = ['p','strong']
tags = {
'p':{'class'},
'strong':{'id'}
}
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,"html.parser")
for tag in soup.find_all():#tag.name就只标签的名字
if tag.name in tags:
input_attrs = tag.attrs#用户提交的标签的所有属性{'class':'c1','id':'i1'}
valid_attrs = tags[tag.name]#class
for k in list(input_attrs.keys()):#把字典变成list类型删除,否则直接在生成器中删除会报错
if k in valid_attrs:
continue
else:
del tag.attrs[k]
else:
tag.hidden = True
tag.clear()
content = soup.decode()
print(content)

这样就把id选择器和class选择器删除了,实现了标签级别和属性级别的同时过滤
之后我们要在用的话就可以把这个封装成一个类进行掉用那个
单例模式
永远用一个对象实例:
先看一个普通的单例模式:
class Foo(object):
instance=None
def __init__(self):
pass
@classmethod
def get_instance(cls):
if Foo.instance:
return Foo.instance
else:
Foo.instance=Foo()
return Foo.instance
def process(self):
return '' obj1 = Foo()
obj2 = Foo()
print(id(obj1),id(obj2))
obj1 = Foo.get_instance()
obj2 = Foo.get_instance()
print(id(obj1),id(obj2))

第二种方法,用__new__()实现:
class Foo(object):
instance=None
def __init__(self):
pass
def __new__(cls, *args, **kwargs):
if Foo.instance:
return Foo.instance
else:
Foo.instance = object.__new__(cls,*args,**kwargs)
return Foo.instance obj1 = Foo()
obj2 = Foo()
print(obj1,obj2)
Django---Xss过滤以及单例模式的更多相关文章
- django xss过滤
django对于xss的过滤有其本身自带的safe等 但是如果通过jsonResponse返回再在前端加载,无法对XSS进行有效的过滤. 因此需自己写一个XSS过滤器,作为装饰器对request的GE ...
- xss过滤与单例模式(对象的实例永远用一个)
kindeditor里面可以加入script代码,使用re可以过滤掉python有个专门的模块可以处理这种情况,beautifulsoup4 调用代码: content = XSSFilter().p ...
- python(Django之组合搜索、JSONP、XSS过滤 )
一.组合搜索 二.jsonp 三.xss过滤 一.组合搜索 首先,我们在做一个门户网站的时候,前端肯定是要进行搜索的,但是如果搜索的类型比较多的话,怎么做才能一目了然的,这样就引出了组合搜索的这个案例 ...
- Python开发【Django】:组合搜索、JSONP、XSS过滤
组合搜索 做博客后台时,需要根据文章的类型做不同的检索 1.简单实现 关联文件: from django.conf.urls import url from . import views urlpat ...
- KindEditor 和 xss过滤
KindEditor 1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files/wup ...
- Django XSS攻击
Django XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种: Reflected XSS(基 ...
- xss 过滤
一. xss过滤 用户通过Form获取展示在终端, 提交数据,Form验证里面加入xss验证(对用户提交的内容验证是否有关键标签) from django.conf.urls import url f ...
- XSS过滤
XSS过滤封装用法 封装到app01/form.py文件中进行验证 from django.forms import Form,widgets,fields class ArticleForm(For ...
- dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)
dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...
随机推荐
- 最好的移动触摸滑动插件:Swiper
最近在使用的一个移动触摸滑动插件Swiper,功能很强大,跟之前的那个swipe.JS相比,同时支持在PC端滑动,支持上下方向滑动,支持多张图片滑动,支持多屏滑动,凡是你想得到的几乎都可以实现.最近作 ...
- CSS 列表样式详解
CSS列表用于前端的列表排列. CSS列表属性作用如下: 设置不同的列表项标记为有序列表 设置不同的列表项标记为无序列表 设置列表项标记为图像 列表 在HTML中,有两种类型的列表: 无序列表 - 列 ...
- 手动编译JAVA类
javac -encoding utf-8 -Djava.ext.dirs=D:\JDeveloper\jdevbin\BC4J\lib\;D:\JDeveloper\jdevbin\j2ee\ho ...
- Netty自定义Encoder/Decoder进行对象传递
转载:http://blog.csdn.net/top_code/article/details/50901623 在上一篇文章中,我们使用Netty4本身自带的ObjectDecoder,Objec ...
- asp.net中的时间日期选择控件
asp.net中的时间日期选择控件 Posted on 2008-07-17 17:37 飛雪飄寒 阅读(22922) 评论(6) 编辑 收藏 在系统中经常需要进行时间日期选择(比如查询时间范 ...
- 利用DotNetZip服务端压缩文件并下载
public void DownFile() { string filePath = Server.MapPath("/Files/txt/bb.txt" ...
- java IO 学习(二)
文件表示形式的转换: 一.从系统文件变成java中可以使用的文件对象 File file = new FIle("文件的路径"); 二.读取文件系统中文件的原始字节流,要读取字符流 ...
- streamsets excel 数据处理
streamsets 有一个directory的origin 可以方便的进行文件的处理,支持的格式也比较多,使用简单 pipeline flow 配置 excel 数据copy 因为使用的是容器,会有 ...
- nexus docker 私有镜像处理
新版本的nexus 可以进行docker 镜像的存储处理 配置私有镜像(host 模式) 修改docker 非安全镜像处理 { "registry-mirrors": [" ...
- EXCEL中如何删除透视表的多余汇总
EXCEL中如何删除透视表的多余汇总 1)如下图,选中字段列,单击鼠标右键,在弹出的菜单中选择[字段设置]选项. 2)弹出[字段设置]对话框. 3)选择“分类汇总和筛选”选项卡,然后勾选“无”选项,单 ...