【问题标题】:Obfuscated Django URL for model objects模型对象的混淆 Django URL
【发布时间】:2010-11-08 19:27:26
【问题描述】:

我有一个看起来像这样的 Django 模型:

class Person(models.Model):

    name = models.CharField(max_length=32)
    place = models.ForeignKey(Place, related_name='people')
    approved = models.BooleanField()
    objects = PersonManager()

    @models.permalink
    def get_absolute_url(self):
        return('deal_details', (), {
            'person_slug': slugify(self.name),
        })

如您所见,我已经有了对象的绝对 URL。但是,我想创建一个难以猜测的 URL 来跟踪对象的批准过程。有人做过类似的事情和/或对我应该如何进行有任何建议吗?

我的第一个想法是创建一个像 obfuscated_key 这样的模型字段,它是通过 save function of the model 随机生成的。然后 URL 将类似于 /people/status/<id>/<obfuscated_key>/。但也许有更好的方法来解决这个问题?

【问题讨论】:

  • 在这种情况下,您要么关心安全性并应该使用真实登录,要么您不关心并且可以跳过混淆步骤。无论哪种方式都优于通过默默无闻的安全性。如果你真的想假装它很有用,你可以使用你想要隐藏的东西的哈希值。
  • @Nathon:绕开态度——“想假装它有用”对我来说听起来既夸张又自命不凡——我相信你的观点很好。真诚地感谢你。非常感谢。这种类型的混淆通常用于生命周期较短的页面,例如密码重置。也许我应该重新考虑它是否符合我的目的。感谢您的意见。
  • @Nathon:一些随机哈希和登录+密码有什么区别?如果有人猜到或拦截其中任何一个,无论如何你都完了。

标签: django obfuscation django-urls


【解决方案1】:

执行此操作的一个好方法是使用安装的密钥(来自 settings.py)对对象的 ID 进行哈希处理。这就是密码重置电子邮件表单的作用——django.contrib.auth.tokens 中有一些有用的代码——在最新的 SVN 版本中,django.contrib.auth.crypto

【讨论】:

    【解决方案2】:

    类似 URL 缩短器(阅读:混淆)之类的东西可能会起作用。

    http://djangosnippets.org/snippets/1323/

    【讨论】:

      【解决方案3】:

      我用 UUIDField 做了类似的事情。

      在模型中:

      uuid = UUIDField(auto=True)
      

      然后在视图中检查 id 和 uuid:

      item = get_object_or_404(Item, id=id, uuid__exact=uuid)
      

      UUIDField 来自http://djangosnippets.org/snippets/335/

      【讨论】:

        猜你喜欢
        • 2012-02-25
        • 2011-05-17
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        • 2010-11-30
        • 2012-07-30
        • 2018-02-03
        • 1970-01-01
        相关资源
        最近更新 更多