使用SimpleDB实施防欺诈投票系统

时间:2011-05-22 22:42:32

标签: amazon-simpledb

我想实现一个投票系统,其中包含存储在Amazon SimpleDB中的所有数据。前端也在Amazon EC2上运行。我主要担心的是服务费用。

投票系统需要防欺诈。也就是说,每个访问者每次选举只允许一票,而且没有用户帐户。我考虑过为每次投票存储一个SimpleDB项目以及它来自的ip地址。然后,如果没有该ip /选择对的条目,我只会插入一个新的投票。

然而,这在存储和处理方面听起来非常昂贵。我必须检索所有投票以统计它们以显示最新结果。

我考虑的另一个选择是存储投票,只是偶尔将它们相加并缓存结果。但这仍然需要我存储所有的选票。

你的建议是什么?

1 个答案:

答案 0 :(得分:5)

让我们首先解决您的主要问题,费用。假设您的系统中有1 000 000票。每个投票由一个simpledb项表示,每个项包含三个属性,一个时间戳,实际投票和一个标识用户的唯一值(我将在稍后介绍该部分)。

现在,simpledb overview page为我们提供了一种计算项目实际存储空间大小的简单方法。

  

Amazon SimpleDB测量的大小   通过添加原始数据来计算您的可计费数据   您上传的数据的字节大小+ 45   每个项目的开销字节数,   属性名称和属性值   对

如果您决定包含更多数据,让我们计算一点空间,让我们说每个项目/投票将花费300字节的存储空间。您的数据的总存储大小将为~286mb。在免费等级限制内。然后是插入物品的成本,但这可能是微不足道的。有一个成本与计票相关联,但正如你已经建议缓存可以帮助缓解这一点。

我将这些数字投入到优秀的Amazon Simple Monthly Calculator服务中以得到一个近似的数字,每1GB存储器获得〜$ 4 /月,1M put,250k获得和100k选择。现在,根据我的经验,事先估计使用情况非常困难,因此您必须随时关注我们的使用情况。 amazon提供的使用情况报告包含有关请求的详细信息,您可以使用它来查看模拟真实世界使用应用程序的效果。

防欺诈

现在,防欺诈部分。我很难评估您正在寻找的欺诈预防水平,但无论如何,如果没有用户帐户,您根本就没有防欺诈投票系统。即使您拥有帐户,也必须非常小心,以避免XSSCSRF,以便恶意用户不会利用其他用户和他们的投票。

每个IP的限制投票存在许多问题。

  • 一些ISP:积极地为其客户重用ip-address
  • 使用在洪流时代蓬勃发展的大量匿名工具(proxys,vpn:s)伪造你的IP太容易了。也可以使用免费的“合法”工具,例如TOR
  • 许多大型组织/政府/学校将通过代理或使用NAT发送其所有用户的流量,这意味着每个组织只能有一个用户投票。

甚至有可能用户在每个请求上都有不同的IP地址(!)

  

说到粘性会话,我们是   惊讶地发现有那些   极少数用户的IP地址   从请求到根本改变   请求。

     

http://blog.stackoverflow.com/2009/07/

如果您真的认真建立一个万无一失的在线投票系统,您将不得不通过某种形式的真实世界身份验证来查看用户帐户(即通过邮寄方式将验证码发送到用户注册的地址)。 / p>

最后,但并非最不重要。无论您的防欺诈机制如何软化,您都必须对数据进行定期审计,以便尽早发现意外的欺诈情况。