【发布时间】: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