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输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
python实现Zabbix-API监控
Sep 17 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
详解python项目实战:模拟登陆CSDN
Apr 04 Python
python如何读取bin文件并下发串口
Jul 05 Python
浅析Python 引号、注释、字符串
Jul 25 Python
python字符串替换re.sub()方法解析
Sep 18 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
python openssl模块安装及用法
Dec 06 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
Jan 10 Python
python三子棋游戏
May 04 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
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
python中管道用法入门实例
2015/06/04 Python
python学生管理系统学习笔记
2019/03/19 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
毕业自我鉴定
2013/11/05 职场文书
课程改革实施方案
2014/03/16 职场文书
物理学专业自荐信
2014/06/11 职场文书
法学院毕业生求职信
2014/06/25 职场文书
群教个人对照检查材料
2014/08/20 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
校园广播稿范文
2015/08/19 职场文书