django框架防止XSS注入的方法分析


Posted in Python onJune 21, 2019

本文实例讲述了django框架防止XSS注入的方法。分享给大家供大家参考,具体如下:

XSS 是常见的跨站脚本攻击,而且这种类型的错误很不容易被发现或者被开发人员忽视,当然django 框架本身是有这方面的考虑的,比如在模板中自动开启了 escape, 但事实上,我在改版我的 个人博客 yihaomen.duapp.com 时,在评论框的地方没有用到富文本编辑器,而是让用户自己输入内容,如果某个用户输入了如下类似的东西:

这是我的评论,

<script>alert('xss injection');</script>

而我在模板中是这样使用的 {{comment|safe}}, 由于使用了 safe filter ,所以这里会直接弹出对话框出来。这就是XSS 注入了。真实的项目中是不允许出现这样的情况的,用safe 的目的是为了更好的显示html标签等。所以要解决的方式是在后台接收到内容的时候,进行转义处理,特别是 "< > " 这些符号,以及 单引号,双引号等,最初,我自己写了一些替换方法。比如

def checkxss(content):
  checked_content = content
  checked_content = re.sub(r"&", "&", checked_content,0,re.I)
  checked_content = re.sub(r"'", "´", checked_content,0,re.I)
  checked_content = re.sub(r'""', """, checked_content,0,re.I)
  checked_content = re.sub(r"<", "<", checked_content,0,re.I)
  checked_content = re.sub(r">", ">", checked_content,0,re.I)
  checked_content = re.sub(r"/", "/", checked_content,0,re.I)

当然在后台处理掉这些,然后保存到数据库,再次打开的时候,在模板用|safe 过滤器,就会还原成原来的样子,确实没错。但问题是我自己画蛇添足了。因为django 自身有一系列的方法。这些方法在 django.utils.html  package中。我用这几个写一个测试.

'''
Created on 2013-11-21
@author: yihaomen.com
'''
from django.utils.html import escape, strip_tags, remove_tags
html_content = """
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <script>alert("test")</script>
  <title>yihaomen.com test</title>
  <link href="/static/css/style.css" rel="external nofollow" rel="stylesheet" type="text/css" />
  </head>
  <body>
   content
  </body>
  </html>
"""
def escape_html(html):
  return escape(html);
def stript_all_tags(html):
  return strip_tags(html)
def remove_part_tags(html,tags):
  return remove_tags(html, tags)
if __name__ == '__main__':
  print "====escape all tags======"
  print escape_html(html_content)
  print "====remove all tags======"
  print strip_tags(html_content)
  print "===remove part tags.====="
  print remove_part_tags(html_content,"script html body")

当然还有更多的方法,可以查看django的代码。 以上的方法可以看到 django 可以很方便的 eacape 所有html标签,也可以部分 escape html标签,还可以只保留内容等。确实很方便。

由此可见用 django.utils.html 里面的东西,足够应付 xss 注入.

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python和bash统计CPU利用率的方法
Jul 10 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 Python
使用python读取csv文件快速插入数据库的实例
Jun 21 Python
用Python实现数据的透视表的方法
Nov 16 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 Python
python如何实现代码检查
Jun 28 Python
python实现局域网内实时通信代码
Dec 22 Python
Python chardet库识别编码原理解析
Feb 18 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
python logging通过json文件配置的步骤
Apr 27 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 #Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 #Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 #Python
django框架使用orm实现批量更新数据的方法
Jun 21 #Python
python字典改变value值方法总结
Jun 21 #Python
python如何以表格形式打印输出的方法示例
Jun 21 #Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 #Python
You might like
剖析 PHP 中的输出缓冲
2006/12/21 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
php命令行写shell实例详解
2018/07/19 PHP
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
Python numpy 点数组去重的实例
2018/04/18 Python
flask session组件的使用示例
2018/12/25 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
Django多数据库联用实现方法解析
2020/11/12 Python
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
集体婚礼证婚词
2014/01/13 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2015年销售助理工作总结
2015/05/11 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang
python实现学生信息管理系统(面向对象)
2022/06/05 Python