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过滤以及单例模式的更多相关文章

  1. django xss过滤

    django对于xss的过滤有其本身自带的safe等 但是如果通过jsonResponse返回再在前端加载,无法对XSS进行有效的过滤. 因此需自己写一个XSS过滤器,作为装饰器对request的GE ...

  2. xss过滤与单例模式(对象的实例永远用一个)

    kindeditor里面可以加入script代码,使用re可以过滤掉python有个专门的模块可以处理这种情况,beautifulsoup4 调用代码: content = XSSFilter().p ...

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

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

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

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

  5. KindEditor 和 xss过滤

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

  6. Django XSS攻击

    Django XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种: Reflected XSS(基 ...

  7. xss 过滤

    一. xss过滤 用户通过Form获取展示在终端, 提交数据,Form验证里面加入xss验证(对用户提交的内容验证是否有关键标签) from django.conf.urls import url f ...

  8. XSS过滤

    XSS过滤封装用法 封装到app01/form.py文件中进行验证 from django.forms import Form,widgets,fields class ArticleForm(For ...

  9. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

随机推荐

  1. android------引导页两种实现方式(原生和WebView网页实现)

    有的App当你第一次打开的是和常常会有引导页来描述一些App信息(功能,特点),当然也要做验证,验证第二次进入不进入引导页,直接进入App,此博客借助ViewPager来实现引导页, ViewPage ...

  2. 偶数求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 ...

  3. 第105天:Ajax 客户端与服务器基本知识

    一.服务器 前言:通俗的讲,能够提供某种服务的机器(计算机)称为服务器 1.服务器类型 - 按服务类型可分为:文件服务器.数据库服务器.邮件服务器.Web服务器等 - 按操作系统可分为:Linux服务 ...

  4. SCWS中文分词PHP扩展详细安装说明

    因最近写的一段代码,需要用到中文分词,在网上找了一下,发现了scws这个不错的插件,故根据文档安装使用,下面记录下安装的全过程 系统:centos 安装scws wget http://www.xun ...

  5. 过滤器系列(三)—— RSQF

    这个过滤器本身是一篇论文中提出的过滤器的简化版本,去掉了计数功能,我觉得简化版本应用的可能也很广,专门写一篇简化版本的RSQF.RSQF全称是rank-and-select based filter, ...

  6. 51nod1289 stack

    1289 大鱼吃小鱼 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动 ...

  7. Springfox与swagger的整合使用(十七)

    一.前言 让我们先理一下springfox与swagger的关系. swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础, ...

  8. 004PHP文件处理——目录操作:glob rewinddir opendir readdir

    <?php /** * 目录操作:glob rewinddir opendir readdir */ //glob 以数组形式返回,参数1这个目录的所有内容,可以置顶返回的具体类型 //只遍历输 ...

  9. Alpha阶段第1周Scrum立会报告+燃尽图 04

    作业要求与https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246相同 一.小组介绍 组长:刘莹莹 组员:朱珅莹 孙韦男 祝玮琦 王玉潘 周 ...

  10. window.onload 和 body.onload 相互覆盖的本质

    从根源上讲,window.onload和<body onload="alert('test');"> 所绑定的对象都是window ,body是没有onload事件的, ...