V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jimisun
V2EX  ›  问与答

如果不需要用户登录认证,服务器如何辨别每一个用户?

  •  
  •   jimisun · 2020-11-18 15:01:11 +08:00 · 1777 次点击
    这是一个创建于 1460 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有这样一个需求,给店面提供一个抽奖功能的 H5 单页面,用户打开这个页面就是一个类似转盘抽奖的活动。 这个单页面很简单,进来就是抽奖,这个单页面也仅仅是一个单页面和 Java 程序服务器互通。

    问题来了,由于用户不需要登录,用户点进来就开始抽,抽不中退出去再进来再抽,直到抽中为止。

    想了几种方案都不足以保证安全,分别如下。

    1. H5 页面的 session 中生成唯一 ID ( PS:用户可以清缓存)
    2. 用户在打开页面的时候将设备和 IP 信息发送到服务器风险控制接口评分(但是 IP 实际上总是变动)
    3. 原本有页面生成的唯一 ID 由服务器根据 IP 和设备信息生成唯一 ID (还是上面的 IP 变动问题)
    4. 抽奖前先上用户输入手机号(没法发验证码,而且发验证码增加了用户的等待时间),会导致用户不停的输入新手机号码抽奖,直到抽中为止,然后告诉我们店家手机号输错了(我们这个活动没那么严格)。

    对于这种简单的场景,应该怎么来实现这个功能呢? 还是我的大方向错误了,这个流程有更正确的方式呢?

    20 条回复    2022-06-22 09:42:23 +08:00
    cmdOptionKana
        1
    cmdOptionKana  
       2020-11-18 15:14:17 +08:00
    可以凭消费的小票(或电子单号)参加抽奖,反正一次消费只能当作一个身份,想多要一个身份就要多消费,不怕被刷。

    如果想让不消费的顾客也能参与,可以在领奖时要求确认电话号码,每个电话号码只有一次领奖机会,后续就算中奖也不能领奖,这也能避免被刷。结合别的防刷技术,有能力破解的人本来就少,就算现场有这样的人,他也只能为少量几个手机号码作假,影响不大。
    hotsun168
        2
    hotsun168  
       2020-11-18 15:14:20 +08:00
    无后端验证的方式永远不可能 100%避免用户伪造提交。所以比较安全的方式应该是验证码或微信登录。
    以成本方式考虑,如果送出去的礼品价值超过发短信和构造微信后台的成本,那么最好还是做后端验证。
    cmdOptionKana
        3
    cmdOptionKana  
       2020-11-18 15:17:58 +08:00
    还可以限定一台设备,专人守着让顾客排队上来抽奖,一般人也不好意思 /没时间多次排队。
    BBrother
        4
    BBrother  
       2020-11-18 15:28:27 +08:00
    以前做的时候选的方案 1,因为一般用户不会清缓存,会清缓存的用户也知道自己在做什么,再说活动没那么严格
    murmur
        5
    murmur  
       2020-11-18 15:29:37 +08:00
    浏览器指纹 配合 IP 一些做风控 只能这样了 手机号这个不想 极验想必你也不会上是吧?
    jimisun
        6
    jimisun  
    OP
       2020-11-18 15:30:08 +08:00
    @cmdOptionKana 活动并不是在店里面的,而是主要发送给微信好友的 H5 网页,不用消费,现在我能想到的就是提供手机号再结合一定的防刷技术配置,但是这样影响了用户体验,用户在别人转发的朋友圈点开后就想简单抽个奖,现在用还要在抽奖前提供一下手机号,这样一定程度上影响了用户的积极性。所以想征求下大家有没有我忽略的更好的 IDEA

    @hotsun168 现在是后端生成的抽奖页面,就是一个 H5 网页,没有对接微信登录,短信验证码都在很大程度上影响了想要的效果。用户打开就是想简单抽个奖,抽不中就算了,抽中了就要到我们店面来领东西消费。促进消费的一种活动。
    linauror
        7
    linauror  
       2020-11-18 15:31:45 +08:00
    对接一下微信获取 openid,这个过程是无感知的,仅仅获取 openid 不需要用户手动同意
    jimisun
        8
    jimisun  
    OP
       2020-11-18 15:37:23 +08:00
    @BBrother 该限制还是要限制的,最低送一桶油什么的,部分刷客一直会清缓存清到中为止。

    @murmur 极验产品很不错,预想这尽量避免手机号验证这一样 很小的门店做一些线上活动 而且活动的奖品什么的都是杯子啊,油 成本不高
    jimisun
        9
    jimisun  
    OP
       2020-11-18 15:39:26 +08:00
    @linauror 是的这个考虑过,但是还有一部分市场是不仅仅在微信,我们的门店可能将这个抽奖页面投放到各大论坛什么的。
    jimisun
        10
    jimisun  
    OP
       2020-11-18 15:45:12 +08:00
    @linauror 好像想要获取 openid 需要中间有公众号的交互才能获取吧 我这个可能就是一个 H5 的网页 发在朋友圈 或者微信消息之中
    9151
        11
    9151  
       2020-11-18 15:45:29 +08:00
    不能读取网卡地址吗?
    ArthurSS
        12
    ArthurSS  
       2020-11-18 15:46:33 +08:00
    jimisun
        13
    jimisun  
    OP
       2020-11-18 17:26:35 +08:00
    @ArthurSS 非常感谢提供思路,刚才搜索了一下,非常棒,但是我 demo 会经常变动在同样设备的不同时间上,请问有稳定的 fingerprintjs 示例吗?
    ArthurSS
        14
    ArthurSS  
       2020-11-18 17:53:34 +08:00
    @jimisun 付费版不知道是不是会好一点,我也是才知道竟然出了付费版
    keepeye
        15
    keepeye  
       2020-11-18 18:01:42 +08:00
    微信网页授权不行吗
    fmumu
        16
    fmumu  
       2020-11-18 19:09:26 +08:00
    微信网页授权,无感知的
    jimisun
        17
    jimisun  
    OP
       2020-11-18 20:56:35 +08:00
    @keepeye
    @fmumu 微信网页是不是需要中间跳转公众号之类的才能获取的到呢?
    @ArthurSS 是啊 刚才看了一下需要付费 从网上 demo 了一下 很随机
    keepeye
        18
    keepeye  
       2020-11-19 10:07:09 +08:00
    @jimisun 静默授权就能拿到 openid 用户无感知
    Alekseyevich
        19
    Alekseyevich  
       2022-06-18 22:52:38 +08:00
    浏览器指纹有了解过么,后来怎么解决的呢?
    zenxds
        20
    zenxds  
       2022-06-22 09:42:23 +08:00
    fingerprintjs 早的时候用过,采集的信息稍微一变就变了,我还提 issue 了,官方解释就是这么设计的,后面就没再用了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6245 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:26 · PVG 10:26 · LAX 18:26 · JFK 21:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.