如何验证Web Service调用者是否是我的网站?

时间:2009-11-26 00:57:55

标签: asp.net javascript web-services web-applications

出于安全原因,我需要保证只有运行特定网站的Web客户端才能访问该Web服务。我只对域请求进行验证,但我需要做一些更强大的功能。我认为太容易破坏我的安全检查。

7 个答案:

答案 0 :(得分:1)

签署令牌(我建议使用至少SHA-1的HMAC)。 This site提供了ASP.NET的示例代码;我不使用.NET,所以我无法验证此代码。

将令牌及其HMAC签名提供给客户端。让客户端在每次请求时将其传回Web服务。

在Web服务中,只需验证HMAC签名。

但是,如果您的令牌永远不会改变,则某些恶意用户可以在客户端的代码中观察它并复制它。您可以通过使令牌成为时间戳并且只允许令牌在特定时间段内有效,或者通过以某种方式将令牌绑定到特定用户来绕过这一点。

参与者不足以作为安全措施;它们可能被代理剥离或被恶意客户伪造。

答案 1 :(得分:0)

如上所述,您可以检查HTTP referer,但这种验证方法使用篡改数据等工具非常容易欺骗:https://addons.mozilla.org/en-US/firefox/addon/966

更好的选择是使用cookie数据管理会话,拒绝没有有效会话令牌的请求。

答案 2 :(得分:0)

您可以使用反向代理保护 - 只允许来自特定IP地址的流量(或沿着这些行的某些内容)。

或者可能检查是否存在特定的数字证书 - 我不确切知道你是怎么做的,但我很确定它是可能的。

您可以使用表单身份验证保护Web服务吗?只允许通过?

@powtac也有正确的想法,虽然我不是安全专家 - 我不确定会有多么恶搞,我想这取决于你的风险等级。

如果您需要一个真正安全的解决方案,您可能希望与安全专家交谈 - 假设您在这里没有得到好的回复;让事情发挥作用是一回事 - 将坏人排除在外是另一回事:)

答案 3 :(得分:0)

我根本不会让网络浏览器调用该服务。

您可以让网站代理对Web服务的所有请求。然后,该网站将直接向您的Web服务提供身份验证(SSL下的基本身份验证,证书,共享密钥或其他方案)。

我不确定这在您的情况下是否实用,但它可以增强安全性。它限制了用户通过黑客攻击提供给他们的HTML来对Web服务发出恶意请求的能力。例如查看安全令牌,查看Web服务端点和数据结构等。安全链中的薄弱环节是网站。如果他们没有正确地验证和授权他们的用户,那么安全模型就会崩溃。

答案 4 :(得分:0)

我不知道这是什么类型的Web服务,但是要么主动将内容推送到客户端(可能不实用),或者如果你真的想要确保,每个x都主动将密钥推送到客户端小时/天/周?密钥将用作每个请求的身份验证。

答案 5 :(得分:0)

由于您使用的是ASP.NET,因此您可以采用一种简单的方法,即内置的Forms身份验证。由于这取决于与Web服务在同一域中设置的cookie,因此使用它的副作用是只有来自同一域的请求才能成功进行身份验证。

答案 6 :(得分:-1)

检查客户端浏览器的引用字符串

修复错字,谢谢Nosredna