【问题标题】:How can I secure a Django site如何保护 Django 站点
【发布时间】:2013-02-11 17:15:23
【问题描述】:

我有一个可以正常工作的 django 网站 - 可以正常运行,运行良好。它使用 Django 的 contrib.auth 进行身份验证。它托管在 Heroku 上。我想为演示目的设置该站点的克隆,但想在站点周围添加一个额外的安全层,这将是一个非常简单的密码保护。不必是防弹的或不可破解的——只要足以让“麻瓜”不敢尝试。

此授权层不应以任何方式干扰站点身份验证本身。它只是一个外环(检查一次,在会话中存储访问权限)。因为该站点托管在 Heroku 上,所以我无法在 Web 服务器级别执行此操作 - 它必须是应用程序本身的一部分。

我的核心选择是创建一个 django 应用程序(工作名称“周界”)来强制执行此操作,但如果有人知道另一种方法来做到这一点,我将非常感激。

核心功能包括:

  • 一些生成短令牌(
  • 针对电子邮件地址记录令牌的一些机制
  • 在首次访问网站时提示用户输入令牌/电子邮件组合
  • 此后可以不受限制地访问网站(标准身份验证模型在此时启动)

典型的用户旅程是:

  • Bob 要求网站所有者(我)访问演示网站
  • 我为 Bob 生成一个令牌并将其与站点 URL 一起发送给他
  • Bob 点击链接,被重定向到页面以输入他的电子邮件和令牌
  • 如果令牌有效(X 小时/天后过期),存储在会话中,让 Bob 进入。
  • 如果令牌无效,则为 403 (/401)。

(您可能想知道为什么保护已经公开的网站副本有意义。这是因为该网站是仅限会员的网站,在演示版中它将是“自动注册”,以便人们可以看到在无法访问真实数据的情况下,网站内部是什么样的。但是,我希望能够跟踪用户。)

[更新:替代]

一种直接的替代方法是将令牌添加到我发送给 Bob 的 URL 中,忽略他的电子邮件,并简单地验证令牌本身。只要 Bob 始终使用电子邮件中的 URL,这将起作用。

【问题讨论】:

  • 使用OpenID认证怎么样?通过一些调整,您可以使其仅接受具有电子邮件地址的登录名(以规避允许完全匿名帐户的 OpenID 提供商)

标签: django


【解决方案1】:

我已经为此创建了自己的解决方案 - 见 Django-Perimeter

此应用程序尚未打包(尚未),因此您需要克隆源代码并将其手动添加到您自己的 django 站点,但它确实有效。它提供了生成访问令牌的能力,然后使用这些令牌保护对站点(整个站点,而不是其中的一部分)的访问。

[更新]

现在可以通过 PyPI - http://pypi.python.org/pypi/django-perimeter

您可以使用pip install django-perimeter进行安装

【讨论】:

  • 或者您可以通过pip -e git://github.com/hugorodgerbrown/django-perimeter.git#egg=django_perimiter添加它
猜你喜欢
  • 2018-09-03
  • 2012-02-12
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 2010-09-13
  • 2021-05-04
相关资源
最近更新 更多