目前,我正在尝试构建一个用户可以对内容进行投票的页面( up / downvote ,类似于StackExchange网络上的功能)。但是用户不需要注册自己就内容进行投票。所以这将是一种“匿名”投票页面。它使用Laravel5构建,并使用MySQL数据库存储投票。用户会话存储在平面文件中,但也可以存储在数据库表中(L5在这里非常灵活)。
如何确保安全?。
我在用户会话中存储限制和已投票的内容,例如当用户对内容XYZ投票时(因此用户现在不能再对特定内容投票)。这些限制是基于时间的,大多数是24到48小时。只要用户不丢弃/删除他的cookie ,这将很有效,会导致创建新会话并删除时间限制,这可能会导致轻松投票欺诈< / em>的
那么,如何避免用户“失去”他的会话?重点是如何让每个“匿名”用户的限制和限制持续存在!匿名投票时无法避免共享PC或在不同位置投票,但需要使用给定的解决方案避免大量“僵尸”或投票欺诈。
将每个用户会话的sessionId设置为IP和的组合 用户代理
我已经提出了一个关于此尝试的问题(下面链接),但它会解决更多问题然后解决(例如简单的会话欺骗)。另外,我无法使用Laravel5手动设置sessionID。
答案 0 :(得分:1)
因为用户没有被存储和维护非常困难,并且无法100%确定。
我如何尝试最紧密地实现这一点是使用请求IP地址和csrf令牌。
您可以从lalavel应用程序中的任何位置获取请求中的IP地址和csrf_token()
。
以下是我将如何实施
的示例创建一个名为votes的表,其中包含以下字段
我会检查客户端是否没有相同的可投票类型和ID的现有记录。 client是一个csrf_token。 ip用于保证请求是否合法。
可投票类型和id是两者之间的多态关系,可能是评论,帖子等。
注意强>
无论如何,如果没有持久的用户身份识别,某些用户可能不会投票,或者某些用户可能会投票两次。它无法完成 完美。
- 某些用户可能会投票给不同的用户代理多个 倍。
- 有些用户可能会欺骗ip。清除饼干
- 不同的用户可能正在使用相同的用户 系统登录。
- 某些用户可能正在使用不同的连接或 系统登录。
所以要么我们采取任何不会100%的信息 准确。
答案 1 :(得分:0)
我的解决方案是实施evercookie以分配&#34;识别Cookie&#34;每个用户detecting privacy browsing并在启用隐身模式或隐私浏览时限制访问权限,最后在没有evercookie的情况下限制多项操作(在我的情况下投票)。