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

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

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

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

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

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

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

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