V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
jimisun
V2EX  ›  问与答

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

  •  
  •   jimisun · Nov 18, 2020 · 2371 views
    This topic created in 1997 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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