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 ...
随机推荐
- android------引导页两种实现方式(原生和WebView网页实现)
有的App当你第一次打开的是和常常会有引导页来描述一些App信息(功能,特点),当然也要做验证,验证第二次进入不进入引导页,直接进入App,此博客借助ViewPager来实现引导页, ViewPage ...
- 偶数求1/2+1/4+...+1/n奇数1/1+1/3+...+1/n
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n Scanner scanner = new Scanner(Sy ...
- 第105天:Ajax 客户端与服务器基本知识
一.服务器 前言:通俗的讲,能够提供某种服务的机器(计算机)称为服务器 1.服务器类型 - 按服务类型可分为:文件服务器.数据库服务器.邮件服务器.Web服务器等 - 按操作系统可分为:Linux服务 ...
- SCWS中文分词PHP扩展详细安装说明
因最近写的一段代码,需要用到中文分词,在网上找了一下,发现了scws这个不错的插件,故根据文档安装使用,下面记录下安装的全过程 系统:centos 安装scws wget http://www.xun ...
- 过滤器系列(三)—— RSQF
这个过滤器本身是一篇论文中提出的过滤器的简化版本,去掉了计数功能,我觉得简化版本应用的可能也很广,专门写一篇简化版本的RSQF.RSQF全称是rank-and-select based filter, ...
- 51nod1289 stack
1289 大鱼吃小鱼 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动 ...
- Springfox与swagger的整合使用(十七)
一.前言 让我们先理一下springfox与swagger的关系. swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础, ...
- 004PHP文件处理——目录操作:glob rewinddir opendir readdir
<?php /** * 目录操作:glob rewinddir opendir readdir */ //glob 以数组形式返回,参数1这个目录的所有内容,可以置顶返回的具体类型 //只遍历输 ...
- Alpha阶段第1周Scrum立会报告+燃尽图 04
作业要求与https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246相同 一.小组介绍 组长:刘莹莹 组员:朱珅莹 孙韦男 祝玮琦 王玉潘 周 ...
- window.onload 和 body.onload 相互覆盖的本质
从根源上讲,window.onload和<body onload="alert('test');"> 所绑定的对象都是window ,body是没有onload事件的, ...