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)的缩 ...
随机推荐
- Linux下的启动oracle的EM的命令
Linux下的启动oracle的EM的命令 1.启动数据库 su - oracle $sqlplus / as sysdba sql>startup 2.启动监听 $lsnrctl LSNRCT ...
- Confluence 6 从一个 XML 备份中导入一个空间
有下面 2 中方法可以导入一个空间——通过上传一个文件,或者从你 Confluence 服务器上的一个目录中导入.上传文件仅仅是针对一个小站点的情况.为了取得最好的导入结果,我们推荐你从服务器上的目录 ...
- js获取到的页面中的checkbox选中的项
需求描述:列表第一列是checkbox name和value都是id 想通过复选框的勾选状态来获取id,在js中获取 js代码: var checkId=$("input[name='che ...
- 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 和 ...
- Loadrunner11.0 录制手机App脚本的方法二
lr11安装一个移动补丁以后,就可以支持抓包文件直接转换为http/html协议的脚本.下面简单说一下过程. 1.工作思路:手机连接可上外网wifi,在手机wifi中设置本机ip的网络地址,然后在本机 ...
- ActiveSync 学习记录
协议就是一种规范.它是高效团队协作的依据.有的人可能不爱看团队规范之类的文档,一方面是个人意识问题,另外也和文档的组织.协作的效果相关. 写好文档: 看好文档. 1. 处理XML转码 抓包后,发现邮件 ...
- IDEA加载项目的设置是tomcat
- Python(列表操作应用实战)
# 输入一个数据,删除一个列表中的所有指定元素# 给定的列表数据data = [1,2,3,4,5,6,7,8,9,0,5,4,3,5,"b","a",&quo ...
- jQuery常见案例
jQuery常见案例 通过jQuery实现全选,反选取消: 选择 地址 端口 1.1.1.1 80 1.1.1.1 80 1.1.1.1 80 1.1.1.1 80 代码实现 <body> ...
- 微信支付JSAPI掉不起来支付按钮是什么原因?(原创)
两种可能: 1.支付页面的js参数有问题 2.微信支付的配置有问题,大概率在微信支付授权目录是否有填写正确