欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Django 开发中你不可不知的 7 个 Web 安全头

来源:本站整理 作者:佚名 时间:2019-10-06 TAG: 我要投稿

Web 是一个不断发展的平台,有很多向后兼容的问题。 新的 web 安全实践通常来自于对存在缺陷的旧功能的认识。 与其通过改变这些功能来破坏旧网站,还不如选择加入一些更安全的设置。 你可以通过设置 HTTP 头来实现这一点。
Securityheaders.com 是一个由安全顾问 Scott Helme 运行的工具,它可以在这些安全头上创建一个报告。 它为任何 URL 提供从 F 到 A+ 的评分,这是一种度量网站安全状况的简单方法。 但是,像任何自动化报告一样,它需要人工解释报告的上下文。
(我也推荐 Mozilla Observatory 安全扫描器,但我不会在这里使用它,因为它的功能远远超过了安全头。)
举个例子,Yahoo在 securityheaders.com 上的得分是 A+ :
 

同时(在写这篇文章的时候) Google 的得分是 C:
 

本文是一个关于如何配置一个典型的 Django web 应用程序来获得 A+ 得分的指南。 你可以击败谷歌,保护你的用户,给你的老板、客户或伙伴留下深刻印象!
我们将查看你需要设置的6个 HTTP 安全头信息来获得 A+ (在撰写本文时)分数。 另外,我们还会提供一个额外的实验性的第7个安全头…
1. X-XSS-Protection
跨站点脚本攻击或 XSS 是一种攻击者可以用来将他们自己的代码注入到你的网站的跨站脚本。 这可能会做一些恶意的事情,比如添加虚假内容或者监视你的用户窃取他们的密码。
由于 XSS 是网站上常见的一种缺陷,浏览器在某些情况下添加了检测和防止这种漏洞攻击的功能,并捆绑在"XSS Auditors"中。 默认情况下,这些安全功能都是启用的,所以看起来像 XSS 攻击的一些脚本会被阻止,但是页面会继续工作。
将X-XSS-Protection HTTP 头设置为使用"块模式"以提供额外的安全性。 这告诉浏览器完全屏蔽被检测到的 XSS 攻击的页面,以防它们包含其他不好的东西。 例如,请参见 Scott Helme 的演示,其中 HTML 发送了一个 GET 参数并出现在被阻塞的页面上。
这提供了一点额外的保护,添加这个HTTP头是一个好主意。 即使你的网站可以防御 XSS 攻击,如果它触发浏览器的 XSS auditor,攻击行为会被重构,以避免继续利用漏洞。
Django 内置了这个HTTP头,并且很容易激活。如果你没有设置该HTTP头,那么你在运行 manage.py check –deploy 时,会看到 security.W007警告。
启用说明:
·你需要在你的MIDDLEWARE中设置django.middleware.security.SecurityMiddleware ,值设置的越高越好。 在默认情况下Django已经为你完成了startproject模板
·在你的设置文件中添加 SECURE_BROWSER_XSS_FILTER = True
请参阅 Django 文档中的更多内容,例如关于媒体文件的说明。
2. Strict-Transport-Security
HTTP Strict Transport Security 或 HSTS,是一种告诉浏览器只能通过 HTTPS 加载你的网站的 HTTP严格传输安全方案。 一旦浏览器在一个网站上看到了标题,它就只会向该网站发出 HTTPS 请求。 该HTTP头包含一个以秒为单位的最大使用时间,这限制了浏览器记忆此操作的时间。 这可以防止中间人攻击或者 AITM 拦截 HTTP 请求并将恶意的内容注入你的网页中。
一般来说建议为Strict-Transport-Security HTTP头设置一个 max-age 值。 除此之外,你还可以设置下面几个标志:
·includeSubDomains 包括你的域名的所有子域名
·preload  告诉浏览器将你的域名存储在已知的只有 strict 域的数据库中。 它只能设置在顶级域名上,如example.com。在 HSTS 预加载的域名上打开 URL 的浏览器将 永远不能够使AITM 攻击支持 HTTP 请求
·一旦设置了这个标志,你就可以通过谷歌的预装载服务将你的域名提交到所有浏览器。在接受你的域名之后,每个浏览器的下一个版本将包括你的域名。
最近有一些 TLD,如.app 实现了自身的预加载,这意味着这些 TLD 只支持 HTTPS 站点。 超级安全。
同样,这个头部是 Django 内置的。 如果你没有设置 max-age 值你会看到 security.W004警告。如果你没有设置 includeSubDomains 标志 则会看到 security.W005警告,同样,如果你未设置 preload 标志,那么你将看到security.W021警告。
启用说明:
·SecurityMiddleware 的安装和设置同上
·将 SECURE_HSTS_SECONDS 设置为你想在头部指定的秒数
·(可选)设置SECURE_HSTS_INCLUDE_SUBDOMAINS  及SECURE_HSTS_PRELOAD 为True 激活他们各自的标志
这不是你可以简单启用的东西,特别是如果其他子域正在使用这些选项的话! 只有当你拥有一个全新的域名时,它才会变得简单明了。 Django 的 security.W004 甚至有如下说明:

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载