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. Linux下的启动oracle的EM的命令

    Linux下的启动oracle的EM的命令 1.启动数据库 su - oracle $sqlplus / as sysdba sql>startup 2.启动监听 $lsnrctl LSNRCT ...

  2. Confluence 6 从一个 XML 备份中导入一个空间

    有下面 2 中方法可以导入一个空间——通过上传一个文件,或者从你 Confluence 服务器上的一个目录中导入.上传文件仅仅是针对一个小站点的情况.为了取得最好的导入结果,我们推荐你从服务器上的目录 ...

  3. js获取到的页面中的checkbox选中的项

    需求描述:列表第一列是checkbox name和value都是id 想通过复选框的勾选状态来获取id,在js中获取 js代码: var checkId=$("input[name='che ...

  4. dbcp连接池出现的问题java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z

    解决方案:mysql-connector 版本为 5.0.4 ,那么对应的 dbcp 和 pool 版本应该为 1.4 和 1.6 .    5.0.4 不应该使用 2.0 及以上版本的 dbcp 和 ...

  5. Loadrunner11.0 录制手机App脚本的方法二

    lr11安装一个移动补丁以后,就可以支持抓包文件直接转换为http/html协议的脚本.下面简单说一下过程. 1.工作思路:手机连接可上外网wifi,在手机wifi中设置本机ip的网络地址,然后在本机 ...

  6. ActiveSync 学习记录

    协议就是一种规范.它是高效团队协作的依据.有的人可能不爱看团队规范之类的文档,一方面是个人意识问题,另外也和文档的组织.协作的效果相关. 写好文档: 看好文档. 1. 处理XML转码 抓包后,发现邮件 ...

  7. IDEA加载项目的设置是tomcat

  8. Python(列表操作应用实战)

    # 输入一个数据,删除一个列表中的所有指定元素# 给定的列表数据data = [1,2,3,4,5,6,7,8,9,0,5,4,3,5,"b","a",&quo ...

  9. jQuery常见案例

    jQuery常见案例 通过jQuery实现全选,反选取消: 选择 地址 端口 1.1.1.1 80 1.1.1.1 80 1.1.1.1 80 1.1.1.1 80 代码实现 <body> ...

  10. 微信支付JSAPI掉不起来支付按钮是什么原因?(原创)

    两种可能: 1.支付页面的js参数有问题 2.微信支付的配置有问题,大概率在微信支付授权目录是否有填写正确