如何避免用户删除他的会话
How to avoid that a user removes his session
用例
目前,我正在尝试构建一个用户可以对内容进行投票的页面(up/downvote,类似于 StackExchange 网络上的功能)。但是用户不需要自己注册就可以对内容进行投票。所以这将是一种 “匿名”投票页面。它是用 Laravel5 构建的,并使用 MySQL 数据库来存储选票。用户会话存储在平面文件中,但也可以存储在数据库中 table(L5 在这里非常灵活)。
问题
如何保证安全?.
我正在用户会话中存储限制和已投票的内容,例如当用户对内容 XYZ 投票时(因此用户暂时不能对特定内容再次投票)。这些限制是基于时间的,主要是 24 到 48 小时。这很有效,只要用户不扔 away/delete 他的 cookies,这将导致创建新会话并删除时间限制,这可能会导致 轻松投票欺诈.
那么,如何避免用户“丢失”他的session呢?重点是如何让每个“匿名”用户的约束和限制持续存在!匿名投票时无法避免共享 PC 或在不同位置投票,但需要使用给定的解决方案来避免“机器人”或大量投票欺诈。
解决方案尝试
Setting the sessionId of each users session to a combination of IP and
User-Agent
我已经就此尝试提出了一个问题(链接如下),但它会带来更多问题,然后再解决(例如简单的会话欺骗)。另外,我无法使用 Laravel5.
手动设置 sessionID
不适合的解决方案
- 让每个用户自己注册(在我的用例中,这对每个用户来说太费力了)
相关
- How to remember an anonymous vote
- Retrieve or reassign user session from ip and user-agent
由于没有存储和维护用户,因此非常困难,无法 100% 确定。
我最接近地尝试实现这一目标的方法是使用请求 ip 地址和 csrf 令牌。
您可以从 laravel 应用程序中的任何地方请求和 csrf_token()
获取 IP 地址。
这是我将如何实施的示例
创建一个 table 具有以下字段的命名投票
- votable_type
- votable_id
- ip_address
- csrf_token
我会检查客户端是否没有相同 votable 类型和 ID 的现有记录。客户是csrf_token。 ip用于保证请求是否合法
votable type和id之间的多态关系可以是评论,帖子等
注
without persisting user identification in anyway some users might not be either vote or some might vote twice. it can't be done
perfectly.
- some users might vote from different user agents multiple
times.
- some users might spoof ip. clear cookies
- different users might be using same
system to login.
- some users might be using different connections or
system logins.
so either we take any information it wouldn't be 100%
accurate.
我的解决方案是实施 evercookie to assign a "Identification Cookie" per user, detecting privacy browsing 并在启用隐身模式或隐私浏览时限制访问,最后在没有 evercookie 时限制一些操作(在我的情况下是投票)。
用例
目前,我正在尝试构建一个用户可以对内容进行投票的页面(up/downvote,类似于 StackExchange 网络上的功能)。但是用户不需要自己注册就可以对内容进行投票。所以这将是一种 “匿名”投票页面。它是用 Laravel5 构建的,并使用 MySQL 数据库来存储选票。用户会话存储在平面文件中,但也可以存储在数据库中 table(L5 在这里非常灵活)。
问题
如何保证安全?.
我正在用户会话中存储限制和已投票的内容,例如当用户对内容 XYZ 投票时(因此用户暂时不能对特定内容再次投票)。这些限制是基于时间的,主要是 24 到 48 小时。这很有效,只要用户不扔 away/delete 他的 cookies,这将导致创建新会话并删除时间限制,这可能会导致 轻松投票欺诈.
那么,如何避免用户“丢失”他的session呢?重点是如何让每个“匿名”用户的约束和限制持续存在!匿名投票时无法避免共享 PC 或在不同位置投票,但需要使用给定的解决方案来避免“机器人”或大量投票欺诈。
解决方案尝试
Setting the sessionId of each users session to a combination of IP and User-Agent
我已经就此尝试提出了一个问题(链接如下),但它会带来更多问题,然后再解决(例如简单的会话欺骗)。另外,我无法使用 Laravel5.
手动设置 sessionID不适合的解决方案
- 让每个用户自己注册(在我的用例中,这对每个用户来说太费力了)
相关
- How to remember an anonymous vote
- Retrieve or reassign user session from ip and user-agent
由于没有存储和维护用户,因此非常困难,无法 100% 确定。
我最接近地尝试实现这一目标的方法是使用请求 ip 地址和 csrf 令牌。
您可以从 laravel 应用程序中的任何地方请求和 csrf_token()
获取 IP 地址。
这是我将如何实施的示例
创建一个 table 具有以下字段的命名投票
- votable_type
- votable_id
- ip_address
- csrf_token
我会检查客户端是否没有相同 votable 类型和 ID 的现有记录。客户是csrf_token。 ip用于保证请求是否合法
votable type和id之间的多态关系可以是评论,帖子等
注
without persisting user identification in anyway some users might not be either vote or some might vote twice. it can't be done perfectly.
- some users might vote from different user agents multiple times.
- some users might spoof ip. clear cookies
- different users might be using same system to login.
- some users might be using different connections or system logins.
so either we take any information it wouldn't be 100% accurate.
我的解决方案是实施 evercookie to assign a "Identification Cookie" per user, detecting privacy browsing 并在启用隐身模式或隐私浏览时限制访问,最后在没有 evercookie 时限制一些操作(在我的情况下是投票)。