RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 658582
Accepted
curveball
curveball
Asked:2020-04-26 05:33:30 +0000 UTC2020-04-26 05:33:30 +0000 UTC 2020-04-26 05:33:30 +0000 UTC

通过检查IP地址保证投票结果的真实性

  • 772

需要进行在线投票。为了避免重复投票,除了在客户端做一些检查,我在服务器端固定了用户的IP和投票id。相应地,如果给定IP的用户已经用给定的id参与了投票,则不接受他在本次投票中的更多票数。但另一方面,毕竟一堆人坐拥1个外部IP的情况,据我了解,在供应商中是相当普遍的,尤其是在大城市,事实证明,他们中的1人投票,他的邻居坐在同一个外部 IP 上,他们将无法投票(如果他们突然闯入)。问题是 - 上述 IP 检查是否过于严格,后端的替代方案是什么?

也许这些动作的实际意义比较弱,因为有一定的概率不计票,但可以忽略不计,理论上这种情况让我很烦,如果去掉这样的IP检查,结果是有人可以在浏览器中进入 javascript 并发送 100,500,000 个请求,从而严重扭曲投票结果。这是两害相权取其轻的选择。最后,做某事如何更好:敞开大门,希望一切都好,还是尽可能多地投保?也许我错过了什么。

php
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Firepro
    2020-04-26T06:45:36Z2020-04-26T06:45:36Z

    没有办法保护互联网上的投票,仅通过检查发给公民的唯一文件或州内唯一的帐户来保护投票也不错。只能通过这个文件来确认的服务,虽然要知道文件可以被伪造或被盗,你的用户的声音可以在任务交易所购买,但这一切都取决于攻击者追求的目标和范围。

    我要引出的问题是,如果投票只是出于获取统计数据的需要,那么你的问题的主要内容是分析和理解提出一些想法是否有意义。

    请记住,保护的代价永远不应超过作弊者从这次胜利中获得的收益。

    解决方案

    1) 最简单的解决方案是在注册用户中进行在线调查,并限制某些内部参数,例如注册日期或总体评分。例如在stackoverflow上,评分较低的用户有较少的选择。这是正确实现的,因为如果您需要在使用类似算法的网站上作弊,那么这种作弊的价格可能会超过您可以获得的平均奖金,而且没有人会简单地这样做。奖品我指的是任何东西(有形的,无形的)

    2) @VladD 概述了一个有趣的想法,通过浏览器指纹识别,这可以使用 FingerprintJS 库,检测百分比:90% - 这允许您通过计算硬件和软件参数、设置值来确定您是否成功在各种本地存储中。

    3)用户通过关闭Javascript等方式轻松绕过该方法。从而降低指纹的唯一性,但这可以通过添加 Google ReCaptcha 轻松绕过,这将避免自动投票。

    4) 发送短信和注册电话号码——这很昂贵,而且并不总是有效。

    5) 如果用户在您的服务中没有帐户,则让他使用另一个受信任的服务(不是社交网络!)进行投票,如果可能,请求提供有关此服务注册日期的数据以及其他有助于识别的信息他。

    附加措施

    1) 不显示票数——这会让攻击者不知道当前情况,普通用户在执行过程中不需要知道票数。

    2) 可以替换答案选项或将它们混合在一起,这会使负责为选项 4 投票的人感到困惑 :)

    3)投票可以有选择地(分批次)展示,全靠你的想象力。


    使用所有东西的一点点,并获得或多或少正确的算法来确定结果。

    票数不是主要的,质量才是最重要的。

    • 5
  2. Morlok
    2020-04-26T05:37:15Z2020-04-26T05:37:15Z

    最简单的是使用客户端 cookie。创建一个带有 ID 的 cookie,并将 ID 保存到数据库中。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5