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列表(list)常用操作方法小结
Feb 02 Python
用Python的线程来解决生产者消费问题的示例
Apr 02 Python
使用wxPython获取系统剪贴板中的数据的教程
May 06 Python
Python实现简单的代理服务器
Jul 25 Python
Python对象转JSON字符串的方法
Apr 27 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
详解Python3中的 input() 函数
Mar 18 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
Python使用Matlab命令过程解析
Jun 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
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
vue组件实例解析
2017/01/10 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
Python Trie树实现字典排序
2014/03/28 Python
python字符串连接的N种方式总结
2014/09/17 Python
Python编码爬坑指南(必看)
2016/06/10 Python
Pandas中resample方法详解
2019/07/02 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
Django静态资源部署404问题解决方案
2020/05/11 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
如何用python 操作zookeeper
2020/12/28 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
社会实践活动总结报告
2014/04/29 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
体育教师个人工作总结
2015/02/09 职场文书
《绝招》教学反思
2016/02/20 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js