避免自动软件控制网络服务?

问题描述 投票:0回答:2

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

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

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

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

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

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

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

.net web-services security silverlight bots
2个回答
0
投票

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


0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.