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)的缩 ...
随机推荐
- Confluence 6 使用页面请求属性来对慢性能进行问题解决
这个页面告诉你如何启用页面请求属性.当这个属性启用以后,你可以查看在 Confluence 任何页面完成的一个记录消耗的时间(毫秒).如果 Confluence 反应缓慢的话,一个关于慢页面请求的内部 ...
- Pod 找不到头文件 解决方法
在 BuildSetting 中 搜索 User Header Search Paths 然后在下面 User Header Search Paths 中添加 ${SRCROOT} 再将后面参数改为 ...
- linux之各目录作用
/opt目录 目录用来安装附加软件包,用户调用软件包程序放在目录/opt/package_name/bin下,package_name是安装软件包的名称 /etc目录 是用来放一些核心的配置文件 附各 ...
- vue.js----之router详解(一)
在vue1.0版本的超链接标签还是原来的a标签,链接地址由v-link属性控制 而vue2.0版本里超链接标签由a标签被替换成了router-link标签,但最终在页面还是会被渲染成a标签的 至于为什 ...
- 浅谈java中bigInteger用法
1.赋值: BigInteger a=new BigInteger("1"); BigInteger b=BigInteger.valueOf(1); 2.运算: ① add(); ...
- gnuradio 创建动态库 libftd3xx.so
首先还是创建好模块gr-kcd cd gr-kcd 打开CMakeLists.txt cmake_minimum_required(VERSION 2.6) project(gr-kcd CXX C) ...
- SpringBoot端口和访问路径
更改启动端口:在application.properties配置文件中修改server.port=9090 更改项目访问路径:在application.properties配置文件中修改server. ...
- Layers Of Caffe
本文试图描述构建一个网络结构的layers,可以用prototxt脚本直接写,也可以用python接口实现. 最简单的神经网络包含但不限于以下四部分: 数据层(Data): Data.ImageDat ...
- 饮冰三年-人工智能-Python-13Python基础之运算符与数据类型
1:算数运算符 + - * / ** % // 2: 成员运算符 in not in name = """张三""" if "张& ...
- 处理OSS上传失败一例
问题描述: 上传oss云存储,无法成功,报错: 2019-01-29 17:44:59,552 oss2.api [ERROR] 140080008111872 : Exception: {'stat ...