20:django中的安全问题
本节主要是讲解django中的安全特性,讲述django是如何应对网站一般面临的安全性问题
跨站点脚本(XXS)攻击
跨站点脚本攻击是指一个用户把客户端脚本注入到其他用户的浏览器中。通常是通过在数据库中存储恶意的脚本,当这些脚本被检索然后展示给其他用户时实现的攻击的,或者诱使 用户点击攻击者的那些会被用户浏览器运行的脚本。django是如何应付的呢?
django的模板系统可以预防大部分的XXS攻击,然而我们要知道,django预防了那些,还有那些是预防不了的:django模板使用了”转义特殊字符“的方法转义了那些对html有危险的字符,然而,这不是一劳永逸的:
<style class={{ var }}>...</style>
假如var的值是class1 onmouseover=javascript:func()呢?这取决于浏览器如何处理这个不合法的html的了?
因此,当一定要在数据库中存储html的时候,请特别注意保证安全性,特别是这些html会被检索然后呈现给用户的时候!
跨站点请求伪造(CSRF)攻击
csrf攻击是在用户不知情的情况下,该用户的凭据被恶意的用户使用去执行某些动作。
django有内建的措施预防大多数类型的csrf攻击,然而,每一种预防的措施都会有自己的缺陷,比如你的站点有一些不在你控制范围的子站点。
除非万不得已,否则请不要使用csrf_exemp装饰器。
SQL注入攻击
SQL攻击是指恶意的用户可以在一个数据库上执行任意的SQL代码,这可能会带来数据丢失,删除甚至崩溃。
通过django的queryset,产生的SQL将被底层数据库驱动程序正确转义。然而,django也提供开发者写原生的查询和运行自定义的sql,这些都是隐患。
Clickjacking点击劫持
你有没有遇到过这样的情况,打开一个网页,出现一个flash广告框,你点击“关闭”按钮,可结果广告并没有关闭,却变成了全屏,这样的情况在计算机安全领域叫做点击劫持,也就是说你点击鼠标的行为被人给控制了。django的X-Frame-Options 中间件保护一个站点不被渲染成一个框架(html的frame),从而预防了点击劫持。
所以,任何没有必要在第三方站点被封装成框架的站点都应该启用这个中间件。
SSL/HTTPS
能安全总是更好的,尽管有时候并不实际。主要不是安全连接HTTPS,还是会有风险的,无论是认证凭据被截获还是客户端与服务器端的其他信息被转换,还是其他。
如果你想启用HTTPS,这是一些额外的需要配置:(这个配置我自己没有实现过,仅供参考,或许需要的时候我们可以私下讨论一下)
- 如果需要,设置SECURE_PROXY_SSL_HEADER
- 设置重定向,以方便HTTP可以转到HTTPS
- 使用安全的cookie
主机头部验证
有些情况下,django使用Host头部去构造一些url,这些值在XXS攻击下是安全的,当对于CSRF,缓存中毒,毒性链接等时却不一定了。
因为这些看似安全的服务器,还是有伪装头部的嫌疑的。django通过对比ALLOWED_HOST和django.http.HttpRequest.get_host()来验证一个Host头部,记住,仅仅get_host方法是安全的,如果你仅仅使用request.META中的内容来校验host头部,那么你已经置django的安全防护于不顾了
其他的安全问题
尽管django提供了很多的安全防护措施,但恰当的开发自己的应用和使用web服务器,操作系统和其他的组件的有用之处也是很重要的:
- 确保你的python代码不在web服务器的根目录,这可以确保你的python代码不会被意外执行
- 小心“用户上传的文件”
- django不限制请求来验证用户身份,因此,为了避免认证系统遭受暴力攻击,你可能需要开发django插件或者web服务器模块来限制这些请求
- 如果你的站点接受文件上传,请保证对这些上传有所控制以避免拒绝服务攻击(DOS),比如控制文件的大小
- 不要泄露你的SECRET_KEY
- 通过使用防火墙来限制你的缓存和数据库的访问
20:django中的安全问题的更多相关文章
- 6月20日 Django中ORM介绍和字段、字段参数、相关操作
一.Django中ORM介绍和字段及字段参数 二.Django ORM 常用字段和参数 三.Django ORM执行原生SQL.在Python脚本中调用Django环境.Django终端打印SQL语句 ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Django中Celery的实现介绍(一)
Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...
- django中添加用户
在django中添加用户,直接在auth_user表中添加会有问题,因为这里密码是加密的,可以通过manage.py shell加入 创建User: 1 >>> from djang ...
- Django中的Model(字段)
Model Django中的model是用来操作数据库的,Model是一个ORM框架,我们只需要关心model的操作,而不需要关心到底是哪一种数据库. 一.基本知识: 数据库引擎: Django中自带 ...
- Django中的Model(操作表)
Model 操作表 一.基本操作 # 增 models.Tb1.objects.create(c1='xx', c2='oo') #增加一条数据,可以接受字典类型数据 **kwargs obj = m ...
- Django中的CSRF
CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...
- Django中ModelForm应用
Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...
- Django中templates使用的补充
Django中的模版的使用 1.实例:查询用户信息,在页面显示,并隔行有底色 test1/views文件 def userinfo(request): if request.method=='GET' ...
随机推荐
- Multi-target tracking with Single Moving Camera
引自:http://www.eecs.umich.edu/vision/mttproject.html Wongun Choi, Caroline Pantofaru, Silvio Savarese ...
- HDU 3487 Splay tree
Play with Chain Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 动态切换input的 disables 属性
$("input[type='text']").each(function(){ if($(this).data('parent_id')){ var _each_this_par ...
- Python学习笔记(Django篇)——3、创建第一个数据库模型
Django里面集成了SQLite的数据库,对于初期研究来说,可以用这个学习. 第一步,创建数据库就涉及到建表等一系列的工作,在此之前,要先在cmd执行一个命令: python manage.py ...
- javascript实现购物车思路
/* 思路: 第一步:获取所要操作的节点对象 第二步:当页面加载完后,需要计算本地cookie存了多少[个]商品,把个数赋值给count 第三步:为每一个商品对应的添加购物车按钮绑定一个点击事件onc ...
- [洛谷P2261] [CQOI2007]余数求和
洛谷题目链接:[CQOI2007]余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n ...
- elasticsearch中Node的创建
要连接到集群,首先要告诉集群:你是谁,你有什么特征.在es中体现为实例化节点,elasticsearch通过org.elasticsearch.node.NodeBuilder的build()或者no ...
- C# 如何用多字符分割字符串
用单字符分割字符串大家应该很熟悉,例如: string source = "dfd^Afdf^AAAAAA^Adfdf"; var list= source.Split('A'); ...
- 外观模式(Facde)【设计模式】
定义:为子系统中的一组接口提供一个一致的界面,Fcade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. “外观模式(Facade pattern),是软件工程中常用的一种软件设计模式,它 ...
- ASP.NET AjaxControlToolkit-Framework4.0 配置实用(简单介绍CalendarExtender日期控件)
1:下载:AjaxControlToolkit Ajax Control Toolkit .NET 4 Ajax Control Toolkit .NET 4.5 Ajax Control Toolk ...