django对于xss的过滤有其本身自带的safe等

但是如果通过jsonResponse返回再在前端加载,无法对XSS进行有效的过滤。

因此需自己写一个XSS过滤器,作为装饰器对request的GET POST函数的返回值进行过滤。

该过滤函数通过对 json list 字符串等进行过滤、可用于 render 、 HttpResponse、JsonResponse

import json

def jsonXssFilter(data):
payloads = {
'\'':''',
'"':'"',
'<':'&lt;',
'>':'&gt;'
}
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过滤的更多相关文章

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

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

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

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

  3. Django XSS攻击

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

  4. xss 过滤

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

  5. KindEditor 和 xss过滤

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

  6. XSS过滤

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

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

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

  8. Asp.net Mvc中利用ValidationAttribute实现xss过滤

    在网站开发中,需要注意的一个问题就是防范XSS攻击,Asp.net mvc中已经自动为我们提供了这个功能.用户提交数据时时,在生成Action参数的过程中asp.net会对用户提交的数据进行验证,一旦 ...

  9. XSS过滤JAVA过滤器filter 防止常见SQL注入

    Java项目中XSS过滤器的使用方法. 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩 ...

随机推荐

  1. oracle 查询数据库的约束条件

    1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.ind ...

  2. Django框架第一篇基础

    一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model(模型):和数据库相关的,负 ...

  3. 《剑指offer》二叉树中和为某一值的路径

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  4. 《剑指offer》旋转数组中的最小数字

    本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例 ...

  5. vue中 裁剪,预览,上传图片 的插件

    参考地址: https://github.com/dai-siki/vue-image-crop-upload

  6. django----Form详细信息

    Form类: 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; Django内置字段 Field required=True, 是否允许为 ...

  7. python提取文件中的方法名称

    #提取文件中的方法名称 # -*- coding:utf-8 -*- def Query_Method(filepath): file = open(filepath,'r',encoding= 'U ...

  8. MSTM年底总结

    项目简介 做完这个项目,自己也做了测试,功能是正常可以使用的,暂时还没有上线,这个项目是用来卖课的,我自己做的是各个种类课程的展示,登录认证,还有各个接口,还有支付环节,还有微信推送消息,加入他们要买 ...

  9. CHENGDU3-Restful API 接口规范、django-rest-framework框架

    Restful API 接口规范.django-rest-framework框架 问题:什么是API? 答:API是接口,提供url. 接口有两个用途: 为别人提供服务,前后端分离. 为什么使用前后端 ...

  10. mysql的基础知识

    一.存储引擎 mysql> show engines; +--------------------+---------+------------------------------------- ...