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实现代码行数统计示例分享
Feb 10 Python
Python中random模块用法实例分析
May 19 Python
Python列表删除的三种方法代码分享
Oct 31 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
python实现随机漫步方法和原理
Jun 10 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
Python实现个人微信号自动监控告警的示例
Jul 03 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
解决django FileFIELD的编码问题
Mar 30 Python
python使用smtplib模块发送邮件
Dec 17 Python
python生成随机数、随机字符、随机字符串
Apr 06 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
Protoss魔法科技
2020/03/14 星际争霸
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
javascript 学习之旅 (1)
2009/02/05 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
20条学习javascript的编程规范的建议
2014/11/28 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
Python笔记之观察者模式
2019/11/20 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
酒店开业庆典策划方案
2014/05/28 职场文书
2014年技术员工作总结
2014/11/18 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
小平小道观后感
2015/06/09 职场文书
礼仪培训心得体会
2016/01/22 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
使用Python获取字典键对应值的方法
2022/04/26 Python