V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shebaoting
V2EX  ›  程序员

手机投票有没有好的防否认机制?

  •  
  •   shebaoting · 27 天前 · 4229 次点击
    小程序内开发一个投票功能,但是怎么样才能做到防止用户否认?比如这个票本来就是他投的,但是他不承认,且咬定是平台用他的名字伪造的数据。。有没有一个好的防否认机制?而且不用太复杂。如果太复杂用户就不投票了。
    第 1 条附言  ·  26 天前
    我再解释一下我所谓的防否认机制:
    1 ,不是说用户否认这个人不是他。因为这个很容易做到,通过什么验证码,openid ,微信授权等等一大堆都可以证明。我说的防否认,是用户承认这个人就是他,但是不承认这个投票的操作是他做的,更精确一点,用户不承认他给 A 投过票。
    2 ,防否认,是防止用户否认他给 A 投过票,也就意味着,这个机制也让平台的确没办法篡改用户的投票。
    3 ,很多朋友说的短信验证码等等,人脸识别等等,仅仅证明这个人是这个人,但不能这个人给 A 投过票。
    4 ,目前有两个看起来好像合适的解决方案,第一个方案是在第三方平台发布投票内容。比如公众号文章。然后投票使用短信发送给内容给 xxxx 号码。这样用户和平台都无法篡改。第二个方案是投票的时候,支付 1 分钱。在投票说明内著名投票给谁。或者直接支付选项的数字。比如投票给 18 号,就付款 0.18 元。最后平台再退回。但这种方案有个隐患,就是微信支付是否会允许这种行为。
    第 2 条附言  ·  26 天前
    至于很多朋友说的,用户说投票是孩子乱点的,或者手机被偷了。这个是用户的责任。和平台无关。是另外一回事了。这也不在防否认讨论的范围内,这种情况等于用户承认了就是他的手机投票的。
    56 条回复    2024-12-24 18:56:21 +08:00
    maix27
        1
    maix27  
       27 天前 via iPhone
    没办法。线下能控制,或者对投票人有实际意义的,线上一般也不会乱投票。线下都没有的说明对投票人本来也没什么意义,说难听点,如果是这个情况,你们这个投票有没有决策力都难说。
    maix27
        2
    maix27  
       27 天前 via iPhone
    最简单的防否认机制就是投票前搞个手机验证码。
    LanhuaMa
        3
    LanhuaMa  
       27 天前
    除非用户手持身份证唱票拍视频上传,不然你怎么搞都没用,就是数据库 update 一行的事情。
    Donaldo
        4
    Donaldo  
       27 天前
    小程序 sdk 有提供签名机制吗,有的话就可以。
    Gilfoyle26
        5
    Gilfoyle26  
       27 天前   ❤️ 1
    很简单,把这种人踢出去。要筛选用户,而不是培养用户。
    mistsobscure
        6
    mistsobscure  
       27 天前
    点击提交前生成一个带水印的完整的投票记录呗,要不然就用链的方式?
    mistsobscure
        7
    mistsobscure  
       27 天前
    话说,啥内容的投票,还有防止用户否认的功能 0.0
    momocraft
        8
    momocraft  
       27 天前
    要求投完用戶轉發或發朋友圈 成功才算投票
    shebaoting
        9
    shebaoting  
    OP
       27 天前
    我想过一个办法,用户投票的时候,发短信给某个号码,短信内容是投票内容。
    mohumohu
        10
    mohumohu  
       27 天前   ❤️ 10
    给每个投票选项设置一分钱的消费选项,消费内容备注投票项,投票后自动退回
    shebaoting
        11
    shebaoting  
    OP
       27 天前
    @mohumohu 这个办法好
    Geon97
        12
    Geon97  
       27 天前
    简单粗暴的办法,log 机制呗,给用户加个可以查看自己投票记录的功能。如果还是咬定是平台用他的名字伪造的数据,这种人无解,用什么方法他们都会说:是平台伪造他的数据
    spritecn
        13
    spritecn  
       27 天前
    @Donaldo 跳腾讯电子签,回调成功才算投票成功,这个原则上是有法律效力的,但签一次几块钱的费用谁来承担!
    spritecn
        14
    spritecn  
       27 天前
    自制手写签名没有法律效力,他咬定的时候,你这个证据是无效的
    lasuar
        15
    lasuar  
       27 天前
    你在尝试寻找一个叫做“签名”的东西。
    Donaldo
        16
    Donaldo  
       27 天前   ❤️ 2
    @spritecn #12 不是这个,是非对称密钥签名的签名。载入小程序的时候在本地生成一对和微信账号绑定且唯一的公私钥,每次投票用用户的私钥去签名投票结果,然后把公钥和签名公开。任何人都可以用他的公钥去验证这个签名是不是来自于这个用户。
    xixiv5
        17
    xixiv5  
       27 天前   ❤️ 1
    不要在技术层面上解决,用户不懂,人脸视频阅读“本人自愿同意 XXXXX”
    NoOneNoBody
        18
    NoOneNoBody  
       27 天前   ❤️ 1
    编程这叫“鉴权”
    市场调查这叫“甄别”,保证数据真实性,线下面对面调查不需要很详细,因为就是本人回答,线上一般要身份鉴定,回访抽查确保真实,但大部分人是拒绝的。所以线下调查至今还有很大价值,就是因为回答相对地真实

    在公众平台例如小程序投票,做这个步骤是不适合的,除非只是“模糊”、“及格”方式的认定,就是身份和结果非紧密相关那种(统计类结果),主要原因是公众平台存在非私密性,可能“共用”或“分享”

    应该在权限更高的场合使用身份鉴权(独立 app ),或提权鉴定,如银行、社保、税局小程序查账这些就加了提权的步骤
    lisxour
        19
    lisxour  
       27 天前
    @spritecn #13 我感觉电子签不会开放这种 api 的
    Lynntox
        20
    Lynntox  
       27 天前
    @lisxour 貌似有第三方做这种不知道靠谱没 我原来办一个代理的时候就跳出了一个合同的签字页面
    Loku
        21
    Loku  
       27 天前
    wx.startSoterAuthentication
    Bantes
        22
    Bantes  
       27 天前
    学学银行和保险公司,做个用户操作录屏完事儿
    realpg
        23
    realpg  
       27 天前
    做个商城,投给谁需要微信支付 1 块钱买谁的名字商品,计票结束后退款退还。
    yufeng0681
        24
    yufeng0681  
       27 天前
    @mohumohu #10 消费用户的信息能看哪个级别? 用户在小程序里投过票,在能客户端看到投票记录的。 这都不认。 他把消费记录删掉,你也没招啊。 服务器看到的他也不会认
    ShadowPower
        25
    ShadowPower  
       27 天前
    区块链技术天生就是用来解决这个问题的
    mohumohu
        26
    mohumohu  
       27 天前
    @yufeng0681
    1 、你提出的是有没有投的问题:微信账单没有删除选项。
    2 、而我理解的否认,一般是否认投给了谁的问题的,而这个能解决你给哪个投了的问题,也就是你拿不出对应选项的账单。
    mohumohu
        27
    mohumohu  
       27 天前
    @yufeng0681 我的意思是,没有彻底删除的选项,即使你删除了,也可以申请交易流水。
    walterdarrell063
        28
    walterdarrell063  
       27 天前
    public key, private key.
    leconio
        29
    leconio  
       27 天前 via iPhone
    用户协议弹窗就行,有法律效力的。
    muapyw
        30
    muapyw  
       27 天前
    电子签名?人脸?
    jim9606
        31
    jim9606  
       27 天前
    如果不信任平台,那平台做啥都没用,实际做法就是不信任平台的用户踢出去。
    就像现在说电子签合同的效力,平台搞什么区块链数字证书人脸识别我觉得都没啥意义,司法案例才能说服我。
    不要尝试用技术解决非技术问题。
    smlcgx
        32
    smlcgx  
       27 天前 via iPhone
    实名制投票吧?技术的办法最多也只是绑定到设备,人家一句我儿子乱按的你就没办法了
    YaakovZiv
        33
    YaakovZiv  
       27 天前
    如果投票者大多使用微信,就用微信小城市申请是实名验证或者手机号验证。如果投票者大多不用微信,我能想到的就是手机号验证或者支付宝上的电子签名验证。
    showonder
        34
    showonder  
       27 天前
    用小程序授权的 session key 呗,用户总不可能否认微信号不是本人操作吧,微信本身就有设备指纹、密码、验证码、人脸识别等验证手段确保微信本人或本人授权的用户登录。
    iv8d
        35
    iv8d  
       27 天前 via Android
    区块链
    moult
        36
    moult  
       27 天前
    短信他也会否认说没收到,短信平台虽然可以查送达状态,但是没法出具盖章的证明。
    就只有“生成支付订单”是最优秀的方案,一分钱的订单,付完不用退,有异议的才发起退款。甚至还能校验支付账号的实名是否匹配。用户耍赖的话,支付机构还能出具法律认可的证明。
    moult
        37
    moult  
       27 天前
    像区块链这种,用户明明选择 B 并上链,用户却说自己选 C 的。但因为上链都在我们系统内实现,没有用户二次确认。
    本来就是防赖皮的,必须引入公平公正、法律认可的第三方介入才行。
    SenLief
        38
    SenLief  
       27 天前
    投票前调用摄像头拍一张照片
    leonshaw
        39
    leonshaw  
       27 天前 via Android
    不引入第三方的话也就录音录像靠谱了。另外即使用订单支付也要能证明订单内容或者备注是用户自己填的,不然也可能说是阴阳单。
    yoshiyuki
        40
    yoshiyuki  
       26 天前
    术语上这个叫做意愿认证,实际的应用中,意愿认证不可能以静默的方式实现
    方式可以是:短信验证码、签名、音视频录制等
    xmumiffy
        41
    xmumiffy  
       26 天前
    @lisxour 电子签当然有 api 啊,签署有回调的
    shebaoting
        42
    shebaoting  
    OP
       26 天前
    @leonshaw 这个订单支付的方案,有办法解决这个问题吗?
    jimmy2024
        43
    jimmy2024  
       26 天前   ❤️ 1
    简单一批,发送短信上行。比如:我支持 xxxx, 送到 106xxxxxxx
    mohumohu
        44
    mohumohu  
       26 天前   ❤️ 1
    @leonshaw 选项 1 支付 1 分钱,选项 2 支付 2 分钱。
    shebaoting
        45
    shebaoting  
    OP
       26 天前
    @mohumohu 这个方案也不错。支付后再退回,因为如果有 999 号的话,就得支付 9.99 元了。但是不知道微信支付是否允许这种方式。
    leonshaw
        46
    leonshaw  
       26 天前 via Android
    @shebaoting 感觉没有完全堵上漏洞,用户可以狡辩点的是给 1 号投票,但是拉起的订单是 2 分,没仔细看就支付了。理想情况是收款码金额或者转账附言这种用户自己输入。另外还要证明没有投完票把两个人号码调换。
    picone
        47
    picone  
       26 天前
    如果投票要支付呢?比如一张票支付 0.01 ,结束后自动退款。要给钱总不能说乱给吧
    GaGaGood
        48
    GaGaGood  
       26 天前
    否认用户的否认
    ca2oh4
        49
    ca2oh4  
       26 天前
    @shebaoting 这不就是区块链广播吗
    bli22ard
        50
    bli22ard  
       26 天前
    op 描述问题的方式很有问题,这个主要是为了防止,用户被诱导,比如线下推广人员诱导点这,点那,然后进行了用户可能不知情的操作。参考信用卡怎么防止用户被诱导办了信用的卡。
    40 楼说的没错,这就是意愿认证
    > 语上这个叫做意愿认证,实际的应用中,意愿认证不可能以静默的方式实现
    > 方式可以是:短信验证码、签名、音视频录制等
    635925926
        51
    635925926  
       26 天前
    为什么要防否认?
    mars2023
        52
    mars2023  
       25 天前
    人脸识别,每一次投票都先进行一次人脸识别。
    elishuhu
        53
    elishuhu  
       25 天前
    这是一个信任问题吧,这个我觉得最好是有一个第三方担保这样,直接给用户一个包含投票信息的加密内容,可以在第三方进行验证这样,每一步都截图保存,这样再抵赖也没法了吧
    shebaoting
        54
    shebaoting  
    OP
       25 天前
    @bli22ard @635925926 具体的场景是小区内召开业主大会成立业委会,但是业委会一般是被物业极力阻挠的。一旦业委会成立,会有损物业的利益。所以物业会想办法阻止。这时候,如果投票本身的逻辑是有漏洞的,如果被发现这个结果是平台有机会进行篡改的。那么就会被放大。设置这个投票也是无效的。

    大家说的上链什么的,只是保证这个投票完成后,结果不会被改了。但是不能防止平台在投票的过程中篡改或者作弊。另外很多朋友说的短信验证码,人脸识别,其实都只能证明这个人投票了。但是不能证明这个人投了 A 。
    cnbatch
        55
    cnbatch  
       25 天前
    那就这样:
    用户选中候选人,按下“提交”,接着进入人脸认证环节,认证通过了才算数。

    更绝一点的,进入投票页面后,打开摄像头录像、启动屏幕录像,一直持续到按下“提交”且提交成功。
    bli22ard
        56
    bli22ard  
       24 天前
    @shebaoting 录一段视频,口里按照固定格式,我 xx ,今天 xx 时候,投 xx 票,然后进行投票。投票平台,每条投票明细,都可以查询,并且每条记录都有录制的朗读声明视频,供大家审计。平台必须公布所有投票明细,包括弃权的。

    另外
    投票人不重要计票人决定一切 --斯大林
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2696 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 05:10 · PVG 13:10 · LAX 21:10 · JFK 00:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.