【问题标题】:avoiding automatic software to control web services?避免使用自动软件来控制 Web 服务?
【发布时间】:2011-09-15 07:43:12
【问题描述】:

假设我构建了一个 Web 服务,以及一个调用该 Web 服务的客户端应用程序。

有什么办法可以阻止我以外的其他软件调用网络服务?

例如,想象一个游戏,玩家可以通过点击一个图标来获得一些钱,该图标每小时只能使用一次。如果用户已连接,那么。如果用户没有连接,他会“松开”时间窗口来获取资金。

在标准的 Web 服务 + 客户端中,任何青少年都可以轻松构建脚本/假应用程序来执行 Web 服务。

我怎样才能避免这种情况? 我知道没有神奇的解决方案,但至少,我怎样才能提高编写此类工具的难度?

PS:我正在使用 Microsoft .Net 平台 + SilverLigth,但我觉得这个问题比 MS 技术更广泛。

[编辑]澄清一下,我不问如何添加身份验证,而是问如何避免用户自动调用 Web 服务。没有什么可以阻止拥有帐户的用户使用其帐户来自动执行呼叫;例如,我想要避免的是拥有一个具有实际身份验证的假应用程序,而不是每 5 秒执行一次用户输入。在游戏中,这样可以避开农夫机器人

【问题讨论】:

  • 这是一个身份验证问题 - 您需要向 Web 服务验证您的 应用程序
  • @John Saunders:不,这不是身份验证问题。我假设黑客可以简单地注册一个帐户及其用户/密码
  • @Steve:身份验证并不意味着用户名/密码。我的意思是您的应用程序本身需要与服务建立身份,可能使用证书。
  • @John Saunders:什么可以阻止黑客重复使用他在注册时获得的证书?
  • @John Saunders:对我来说,证书有两个目的。要么通过交换会话密钥来保护通信通道(这不会阻止黑客打开自己的会话),要么是身份验证机制的一部分。在这种情况下,无论是哪个客户端,都必须拥有私钥......对吗?你告诉我在应用程序中嵌入证书的私钥。我仍然相信黑客可以反编译应用程序以提取私钥,然后游戏就结束了。还是我错过了证书的其他用途?

标签: .net silverlight web-services security robot


【解决方案1】:

WCF Web 服务方法可以使用安全要求进行修饰。这包括 Silverlight 的 RIA 服务(基本上只是 WCF 服务)。

您可以要求基本身份验证,甚至要求用户必须是特定角色的成员才能使用特定方法。

这当然意味着您的应用程序必须使用身份验证(即用户必须登录)。

替代方案是提供您自己的身份验证系统(例如使用令牌),但这仍然需要应用程序(至少)首先登录服务以获取新令牌。

[编辑] 在回答您的后续行动时,机器人检测通常是记录呼叫之间的持续时间或平均持续时间,如果超出限制则简单地禁止访问。 (或者如果你真的很刻薄,取消他们的帐户或开始返回垃圾数据)

【讨论】:

  • 这不能回答我的问题。看看我的编辑,我已经澄清了一点
【解决方案2】:

您会希望服务器更加了解游戏状态。例如,在您概述的情况下,服务器应该知道那个钱图标是否在屏幕上供用户点击。当收到“点击钱”的请求时,它应该检查钱是否真的在屏幕上。也许只需为每个用户添加一个“最后一次点击金钱”变量就足够了。但这将允许机器人“点击钱”,即使他们不在游戏中,尽管您可以限制频率。也许你可以选择更强大的东西。例如,当在屏幕上显示货币图标时,包含一个随机键值(GUID 或类似的东西),您可以通过有效调用将其发回,以验证他们是否实际点击了实际显示的真钱图标他们的屏幕,而不是仅仅点击金钱图标,你确切地知道他们在点击什么。这使得编写脚本更加困难,因为他们必须查看游戏的内存内容以确定附加到金钱图标的 GUID 并将其与请求一起提交。这仍然是可能的,尽管要困难得多。

【讨论】:

  • 如果服务器必须检查 guid,它必须知道 guid。这意味着服务器必须已将 guid 发送到客户端应用程序...我认为黑客不必为此扫描内存...
  • 其实我觉得我唯一的办法就是每15分钟使用一个captcha机制来防止bot处理请求。但是,这意味着用户将被定期限制在此验证码中使用 type :(
  • @Steve,他们不必这样做,但他们必须与服务器建立某种持续的通信。他们必须启动某种操作,首先发送 GUID,然后使用 GUID 提交请求。所以他们可能不必扫描内存,但他们可能必须建立一个更复杂的系统来与服务器通信。这最终可能不值得。如果你只是限制频率,那么你至少可以做到让他们只能像玩游戏的人一样好,而不是更好。
  • 另外值得注意的是,即使您要求人们点击屏幕上的某些内容,人们仍然可以自动执行该操作。我不知道是否有人记得 AllAdvantage 和他们付费冲浪的商业模式。我知道很多人编写脚本来通过控制他们的实际鼠标并在互联网上单击来击败系统来浏览网络。
  • 我实际上记得某种 AllAdvantage,它使应用程序定期崩溃,只是为了迫使用户重新启动它(今天没有这样的应用程序......很容易理解为什么)。我的结论是,我将不得不增加复杂性,以启动 90% 的恶意用户,并尝试分析服务器上的使用情况以检测“可疑”使用情况……这不是一件容易的事
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2023-03-16
  • 2017-07-21
  • 1970-01-01
  • 2012-12-31
相关资源
最近更新 更多