如何避免用户删除其会话

时间:2016-12-19 09:42:49

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

用例

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

问题

如何确保安全?

我在用户会话中存储限制和已投票的内容,例如当用户对内容XYZ投票时(因此用户现在不能再对特定内容投票)。这些限制是基于时间的,大多数是24到48小时。只要用户不丢弃/删除他的cookie ,这将很有效,会导致创建新会话并删除时间限制,这可能会导致轻松投票欺诈< / em>的

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

解决方案尝试

  

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

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

不适合的解决方案

  • 让每个用户注册自己(在我的用例中,每个用户只需要付出太多努力)

相关

2 个答案:

答案 0 :(得分:1)

因为用户没有被存储和维护非常困难,并且无法100%确定。

我如何尝试最紧密地实现这一点是使用请求IP地址和csrf令牌。 您可以从lalavel应用程序中的任何位置获取请求中的IP地址和csrf_token()

以下是我将如何实施

的示例

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

  • votable_type
  • votable_id
  • IP_ADDRESS
  • csrf_token

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

可投票类型和id是两者之间的多态关系,可能是评论,帖子等。

注意

  无论如何,如果没有持久的用户身份识别,某些用户可能不会投票,或者某些用户可能会投票两次。它无法完成   完美。

     
      
  • 某些用户可能会投票给不同的用户代理多个   倍。
  •   
  • 有些用户可能会欺骗ip。清除饼干
  •   
  • 不同的用户可能正在使用相同的用户   系统登录。
  •   
  • 某些用户可能正在使用不同的连接或   系统登录。
  •   
     

所以要么我们采取任何不会100%的信息   准确。

答案 1 :(得分:0)

我的解决方案是实施evercookie以分配&#34;识别Cookie&#34;每个用户detecting privacy browsing并在启用隐身模式或隐私浏览时限制访问权限,最后在没有evercookie的情况下限制多项操作(在我的情况下投票)。