如何保护Django站点

时间:2013-02-11 17:15:24

标签: django

我有一个工作的django网站 - 现场直播,工作得很好。它使用Django的contrib.auth进行身份验证。它托管在Heroku上。我想为了演示目的设置一个克隆这个网站,但是想在网站周围增加一层额外的安全性,这将是一个非常简单的密码保护。不必是防弹或不可防御 - 只是足以让'麻瓜'不再尝试。

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

我的核选择是创建一个django应用程序(工作标题'外围'),这将强制执行此操作,但如果有人知道另一种方法,我会非常感激。

核心功能包括:

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

典型的用户旅程是:

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

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

[更新:替代]

一个直截了当的选择是将令牌添加到我发送Bob的URL,忽略他的电子邮件,并简单地验证令牌本身。只要Bob总是使用电子邮件中的URL,那就行了。

1 个答案:

答案 0 :(得分:3)

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

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

<强> [UPDATE]

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

获取

您可以使用pip install django-perimeter

进行安装