Python——Django 框架——安全

来源:互联网 发布:手机怎么设置网络权限 编辑:程序博客网 时间:2024/06/05 23:49

官方文档
https://docs.djangoproject.com/en/dev/#security
Django提供了多种保护工具和机制;
Xss(跨站脚本)保护:
使用Django模板可避免一部分,
Django模板会转义 对HTML有危险的特定字符。这样可以保护用户免受多数恶意输入。
CSRF(跨站点请求伪造)保护:
Django内置防范大多数类型的CSRF攻击,在适当的情况下启用并使用它即可。
通过在每个POST请求中参数检查来进行 CSRF保护。这确保恶意用户不能简单地“重新发送”表单POST到您的网站,并让另一个登录用户无意中提交该表单。恶意用户必须知道用户特定的登录参数(使用cookie)。
Django表单用在模板中的时候,加一句 {% csrf_token %}
SQL注入保护:
恶意用户在数据中执行任意的SQL语句,导致数据的破坏、泄露。
可以通过调用Django的查询器,生成的SQL将被底层数据库驱动程序正确地转义。
劫持保护:
Django包含 支持浏览器中可以防止网站在框架内渲染的形式的 点击保护。可以在每个视图的基础上禁用保护或配置发送的确切的头值。X-Frame-Options middleware
HTTPS安全:
HTTPS部署站点,恶意网络用户可能会窃取身份验证凭据或客户端与服务器之间传输的任何其他信息。设置SECURE_PROXY_SSL_HEADER。 设置SECURE_SSL_REDIRECT为True,以便通过HTTP的请求重定向到HTTPS。 注意SECURE_PROXY_SSL_HEADER。对于反向代理的情况,将主Web服务器配置为重定向到HTTPS可能更容易或更安全。 使用“安全”Cookie。 如果浏览器最初通过HTTP连接,这是大多数浏览器的默认设置,现有的Cookie可能会泄露。设置SESSION_COOKIE_SECURE和 CSRF_COOKIE_SECURE设置设置为True。这将指示浏览器只通过HTTPS连接发送这些Cookie。请注意,这意味着会话将无法通过HTTP执行,而CSRF保护将阻止任何POST数据被HTTP接受(如果将所有HTTP流量重定向到HTTPS,则会很好)。 使用HTTP严格传输安全(HSTS)
Host header验证:
Django使用客户端提供的头来构造URL,以防止跨站点脚本攻击。但是Host可以使用假值来进行跨站点请求伪造,缓存中毒攻击和电子邮件中毒链接。
Session 安全:
django.contrib.sessions也有局限性。
用户上传:
部署站点的CSRF限制,使得不受信任的用户无权访问任何子域。
限制上传文件大小,禁用执行静态文件的处理程序,文件类型的验证。
劫持保护:
劫持中间件和装饰器提供易于使用的防劫持保护。当恶意网站欺骗用户点击隐藏框架或iframe中加载的另一个站点的隐藏元素时,会发生这种类型的攻击。
防止点击:使用X-Frame-OptionsHTTP标头
要设置相同X-Frame-Options的站点中的所有响应值,把 ‘django.middleware.clickjacking.XFrameOptionsMiddleware’到 MIDDLEWARE
该X-Frame-Options头只会防止点击劫持在一个较新的浏览器。
跨站点请求伪造保护:
CSRF 的middleware and template提供了保护。
当恶意网站包含链接,表单按钮或旨在在您的网站上执行某些操作的JavaScript时,会使用访问浏览器中恶意站点的登录用户的凭据发生此类攻击。一个相关类型的攻击“登录CSRF”
防御措施:不使用GET请求。
CSRF middleware在MIDDLEWARE 设置中默认激活。
在使用POST表单的任何模板中,如果表单用于内部URL,请使用元素csrf_token内的标记
在相应的视图功能中,确保 RequestContext用于呈现响应。
AJAX:
AJAX POST请求,必须记住将CSRF token作为POST数据与每个POST请求一起传递。 或者:在每个XMLHttpRequest上,将自定义X-CSRFToken标头设置为CSRF令牌的值。这通常更容易,因为许多JavaScript框架提供了允许在每个请求上设置标题的hooks。
在AJAX请求上设置令牌
Django的Jinja2模板后端添加到Django模板语言中相当于所有模板的上下文。例如:{{ csrf_input }}{% csrf_token %}

可以使用多个设置来控制Django的CSRF行为:CSRF_COOKIE_AGE,CSRF_COOKIE_DOMAIN,CSRF_COOKIE_HTTPONLY,CSRF_COOKIE_NAME,CSRF_COOKIE_PATH,CSRF_COOKIE_SECURE,CSRF_FAILURE_VIEW,CSRF_HEADER_NAME,CSRF_TRUSTED_ORIGINS,CSRF_USE_SESSIONS
加密的签名
永远不要信任来自不受信任来源的数据。
Django提供了用于签名值的low-level API和用于设置和读取签名的Cookie的high-level API,这是登录Web应用程序的最常用的方法之一。
Django的签名方法生活在django.core.signing模块中。
使用salt参数(加salt)
验证时间戳:TimestampSigner是一个子类,Signer它将一个带符号的时间戳附加到该值。
保护复杂的数据结构

Middleware
缓存中间件 类UpdateCacheMiddleware、类FetchFromCacheMiddleware
“Common”中间件 类CommonMiddleware、类BrokenLinkEmailsMiddleware
异常中间件 类ExceptionMiddleware
GZip压缩中间件 类GzipMiddleware
条件GET中间件 类ConditionalGetMiddleware、类LocaleMiddleware
消息中间件
类MessageMiddleware
安全中间件
SSL重定向
站点中间件 类CurrentSiteMiddleware
验证中间件 类AuthenticationMiddleware、类RemoteUserMiddleware、类PersistentRemoteUserMiddleware
CSRF保护中间件 类CsrfViewMiddleware
X-Frame-Options中间件 类XFrameOptionsMiddleware

原创粉丝点击