【问题标题】:How to avoid that a user removes his session如何避免用户删除他的会话
【发布时间】:2016-12-19 09:42:49
【问题描述】:

用例

目前,我正在尝试构建一个用户可以对内容进行投票的页面(up/downvote,类似于 StackExchange 网络上的功能)。但是用户不需要注册自己就可以对内容进行投票。所以这将是一种“匿名”投票页面。它是用 Laravel5 构建的,并使用 MySQL 数据库来存储投票。用户会话存储在平面文件中,但也可以存储在数据库表中(L5 在这里非常灵活)。


问题

如何使其安全?

我在用户会话中存储限制和已投票的内容,例如当用户对内容 XYZ 进行了投票时(因此用户暂时无法再次对特定内容进行投票)。这些限制是基于时间的,主要是 24 到 48 小时。这很好用,只要用户不丢弃/删除他的 cookie,这将导致创建新会话并取消时间限制,这可能导致容易的投票欺诈。

那么,如何避免用户“丢失”他的会话? 重点是如何让每个“匿名”用户的限制和限制持续存在!匿名投票时无法避免共享 PC 或在不同地点投票,但需要通过给定的解决方案避免“botting”或大量投票欺诈。


解决方案尝试

将每个用户会话的 sessionId 设置为 IP 和 用户代理

我已经询问了有关此尝试的问题(链接如下),但它会引发更多问题然后解决(例如简单的会话欺骗)。另外,我无法使用 Laravel5 手动设置 sessionID。


不适合的解决方案

  • 让每个用户自己注册(在我的用例中,这对每个用户来说都太费力了)

相关

【问题讨论】:

  • 用IP地址做点什么?
  • 每个用户有这么多设备可用,而且现在大多数浏览器都支持匿名浏览,就个人而言,我相信设置一个 cookie(不是基于会话的)将是实现这一目标的唯一方法,并且让用户保持匿名(不收集可以识别他们个人身份的数据)。
  • @Refilon 请阅读“解决方案尝试”部分。这个已经试过了。相关的 SO 问题可以在底部找到。
  • @WilliamIsted 但是当用户删除他的 cookie 时会发生什么?所有的“限制”都丢失/消失了......
  • @manniL 供您参考;有许多技术可供人们和公司练习,以确保一个用户与以前相同。 en.wikipedia.org/wiki/Canvas_fingerprinting 在您的情况下,“一位软件开发人员在《福布斯》上写道,设备指纹识别已被用于防止未经授权访问系统,而早在未经用户同意的情况下,它就被用于跟踪用户。”似乎是相关的,但尽管有进一步收集机器配置的能力,但这种方法仍然不能完全证明。

标签: php laravel session laravel-5 rating-system


【解决方案1】:

由于用户没有被存储和维护,这非常困难,并且不能 100% 确定。

我如何尝试最接近地实现这一点是使用请求 ip 地址和 csrf 令牌。 你可以从你的 laravel 应用程序中的任何地方从请求和csrf_token() 中获取 IP 地址。

这是我将如何实现的示例

创建一个名为 votes 的表,包含以下字段

  • votable_type
  • votable_id
  • ip_address
  • csrf_token

我会检查客户是否没有相同的可投票类型和 ID 的现有记录。客户端是一个 csrf_token。 ip用于保证请求是否合法。

votable type和id是多态关系,可以是cmets、posts等。

注意

无论如何,如果没有持久的用户标识,一些用户可能不会投票,或者有些用户可能会投票两次。做不到 完美。

  • 某些用户可能会从不同的用户代理多次投票 次。
  • 某些用户可能会欺骗 ip。清除 cookie
  • 不同的用户可能使用相同的 系统登录。
  • 某些用户可能使用不同的连接或 系统登录。

所以要么我们获取任何信息,它就不会是 100% 准确。

【讨论】:

  • 这种方法对于在公共空间共享计算机的实体(例如图书馆、学校、大学、办公室等)会出现问题......这可能取决于将要投票的用户的人口统计。
  • 你的意思是 csrf 令牌是一样的?
  • csrf 会有所不同,但如果用户一整天从一台 PC 移动到另一台 PC,如果域登录中没有保留 cookie,他们可能能够再次投票
  • 我猜当用户删除他的cookies时,csrf令牌不会一样了。
  • 其他人使用相同系统的方式相同。所以他也不能投票:)
【解决方案2】:

我的解决方案是结合实现evercookie 为每个用户分配一个“标识 Cookie”detecting privacy browsing 并在启用隐身模式或隐私浏览时限制访问,最后在不启用时限制几个操作(在我的情况下投票)拥有evercookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2016-12-22
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多