【问题标题】:Django: Creating a unique identifier for a user based on request.META valuesDjango:根据 request.META 值为用户创建唯一标识符
【发布时间】:2014-05-18 18:00:04
【问题描述】:

我正在考虑创建一个匿名投票。但是,我想防止用户投票两次。我正在考虑像这样散列一些 request.META 值:

from hashlib import md5

request_id_keys = (
    'HTTP_ACCEPT_CHARSET',
    'HTTP_ACCEPT',
    'HTTP_ACCEPT_ENCODING',
    'HTTP_ACCEPT_LANGUAGE',
    'HTTP_CONNECTION',
    'HTTP_USER_AGENT',
    'REMOTE_ADDR',
)

request_id = md5('|'.join([request.META.get(k, '') for k in requst_id_keys])).hexdigest()

我的问题:

  1. 好主意?馊主意?为什么?
  2. 这些键中的某些键是多余的还是只是矫枉过正?为什么?
  3. 其中一些容易更改吗?例如,我正在考虑删除 HTTP_USER_AGENT,因为我知道这只是一个简单的配置更改。
  4. 知道实现这个半唯一标识符的更好方法吗?该方法足够灵活,可以处理共享 IP (NAT) 的人员,但简单的配置更改不会创建新的哈希?

【问题讨论】:

    标签: django http browser django-forms http-headers


    【解决方案1】:

    所有这些参数都相当容易更改。为什么不为此目的使用 cookie?我猜像evercookie

    evercookie 是一种可用的 javascript API,可在浏览器中生成极其持久的 cookie。它的目标是即使在客户删除了标准 cookie、Flash cookie(本地共享对象或 LSO)等之后也能识别他们。

    【讨论】:

    • 好主意。为evercookie +1。
    • 我所做的只是进入 Chrome 隐身模式,并以新用户的身份出现。我希望有比这更强大的东西。更不用说使用一些漏洞来跟踪用户了。
    • 如果是匿名投票,你必须承认会有你无法追踪的用户,否则你最终会被'skeevy'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多