django xss过滤
django对于xss的过滤有其本身自带的safe等
但是如果通过jsonResponse返回再在前端加载,无法对XSS进行有效的过滤。
因此需自己写一个XSS过滤器,作为装饰器对request的GET POST函数的返回值进行过滤。
该过滤函数通过对 json list 字符串等进行过滤、可用于 render 、 HttpResponse、JsonResponse
import json def jsonXssFilter(data):
payloads = {
'\'':''',
'"':'"',
'<':'<',
'>':'>'
}
if type(data) == dict:
new = {}
for key,values in data.items():
new[key] = jsonXssFilter(values)
elif type(data) == list:
new = []
for i in data:
new.append(jsonXssFilter(i))
elif type(data) == int or type(data) == float:
new = data
elif type(data) == str:
new = data
for key,value in payloads.items():
new = new.replace(key,value)
elif type(data) ==bytes:
new = data
else:
print('>>> unknown type:')
print(type(data))
new = data
return new def xssfilter(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
result.content = result.content
try:
jsondata = json.loads(result.content)
result.content = json.dumps(jsonXssFilter(jsondata))
except:
result.content = jsonXssFilter(result.content)
return result
return wrapper
demo 作为GET POST函数的装饰器:
class PermissionListView(LoginRequiredMixin, generic.TemplateView):
"""权限管理"""
def dispatch(self, request, *args, **kwargs):
return super(PermissionListView, self).dispatch(request, *args, **kwargs)
@xssfilter
def get(self, request, *args, **kwargs):
if not user_has_permission(str(request.user),'permission_list'):
return render(request, "blank.html")
return render(request, 'user_manage/permission.html', locals()) @xssfilter
def post(self, request, *args, **kwargs):
if request.is_ajax():
self.post_data = request.POST
dics = {
"listPermission":{'op_fun':self.list_permission,'perm':'permission_list'},
"addPermission":{'op_fun':self.add_permission,'perm':'permission_operate'},
"delPermission":{'op_fun':self.del_permission,'perm':'permission_operate'}
}
operation=self.post_data.get("operation","")
if not user_has_permission(str(request.user),dics[operation]['perm']):
response = {'state':'false','message':'权限不够,需%s权限'%(dics[operation]['perm'])}
return JsonResponse(response)
data = dics[operation]['op_fun']()
if not data:
data = {}
data['state'] = 'success'
return JsonResponse(data=data)
def list_permission(self):
return {'permissions':search_all_permission()}
def add_permission(self):
permission_name = self.post_data['permissionName']
permission_codename = self.post_data['permissionCodename']
add_permission(name=permission_name,codename=permission_codename)
def del_permission(self):
del_permission(permissionid=self.post_data['permissionid'])
django xss过滤的更多相关文章
- python(Django之组合搜索、JSONP、XSS过滤 )
一.组合搜索 二.jsonp 三.xss过滤 一.组合搜索 首先,我们在做一个门户网站的时候,前端肯定是要进行搜索的,但是如果搜索的类型比较多的话,怎么做才能一目了然的,这样就引出了组合搜索的这个案例 ...
- Python开发【Django】:组合搜索、JSONP、XSS过滤
组合搜索 做博客后台时,需要根据文章的类型做不同的检索 1.简单实现 关联文件: from django.conf.urls import url from . import views urlpat ...
- Django XSS攻击
Django XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种: Reflected XSS(基 ...
- xss 过滤
一. xss过滤 用户通过Form获取展示在终端, 提交数据,Form验证里面加入xss验证(对用户提交的内容验证是否有关键标签) from django.conf.urls import url f ...
- KindEditor 和 xss过滤
KindEditor 1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files/wup ...
- XSS过滤
XSS过滤封装用法 封装到app01/form.py文件中进行验证 from django.forms import Form,widgets,fields class ArticleForm(For ...
- dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)
dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...
- Asp.net Mvc中利用ValidationAttribute实现xss过滤
在网站开发中,需要注意的一个问题就是防范XSS攻击,Asp.net mvc中已经自动为我们提供了这个功能.用户提交数据时时,在生成Action参数的过程中asp.net会对用户提交的数据进行验证,一旦 ...
- XSS过滤JAVA过滤器filter 防止常见SQL注入
Java项目中XSS过滤器的使用方法. 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩 ...
随机推荐
- oracle 查询数据库的约束条件
1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.ind ...
- Django框架第一篇基础
一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...
- 《剑指offer》二叉树中和为某一值的路径
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 《剑指offer》旋转数组中的最小数字
本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例 ...
- vue中 裁剪,预览,上传图片 的插件
参考地址: https://github.com/dai-siki/vue-image-crop-upload
- django----Form详细信息
Form类: 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; Django内置字段 Field required=True, 是否允许为 ...
- python提取文件中的方法名称
#提取文件中的方法名称 # -*- coding:utf-8 -*- def Query_Method(filepath): file = open(filepath,'r',encoding= 'U ...
- MSTM年底总结
项目简介 做完这个项目,自己也做了测试,功能是正常可以使用的,暂时还没有上线,这个项目是用来卖课的,我自己做的是各个种类课程的展示,登录认证,还有各个接口,还有支付环节,还有微信推送消息,加入他们要买 ...
- CHENGDU3-Restful API 接口规范、django-rest-framework框架
Restful API 接口规范.django-rest-framework框架 问题:什么是API? 答:API是接口,提供url. 接口有两个用途: 为别人提供服务,前后端分离. 为什么使用前后端 ...
- mysql的基础知识
一.存储引擎 mysql> show engines; +--------------------+---------+------------------------------------- ...