1

我正在构建一个 ASP.NET 应用程序。其中一项要求是限制用户可以访问站点内容的不同计算机的数量(例如 5 台计算机)。它不一定是完美的,如果没有 IT 知识的普通用户将无法省略检查 - 解决方案将是 K.

我正在考虑一种获取用户机器指纹的方法(例如:MAC 和计算机名称的组合)。当然,用户将被告知检查他们的 MAC。但是,这很难做到,因为 HTTP 协议是无状态的。一种解决方案是使用 ActiveX。但它仅限于 Windows 系统,并且很容易通过安全检查(只需禁用 ActiveX,据我所知默认情况下禁用)。

正如我在谷歌上搜索的那样,这是一个很常见的问题,但是除了使用 ActiveX 之外没有其他解决方案。有没有人遇到过这种问题,并找到了一些好的解决方案?

用户可以在不同的网络中。这将是一个外联网应用程序,因此检查 IP 将不起作用(路由器和动态 IP)。

编辑:我想通过这样做来避免购买会员资格,然后将帐户数据分享给您所有的朋友。

4

8 回答 8

3

根据您的评论

这种要求的意义是避免用户在应用程序中注册、支付会员费用以及将帐户凭据提供给其他人。

要么像RSA 硬件验证器那样昂贵且高度安全

-或者-

你改变了你的商业模式,让分享凭证变得没有吸引力。例如,由于成本 - 我不分享我的苹果或亚马逊信誉,因为我不想为他们的购买付款。另一个是拥有一个用户社区。没有人分享他们的 flickr 帐户,因为这些照片在艺术上是他们的,而且他们不希望任何人为了几美元而捣乱他们的东西。不鼓励共享,因为它是一个社区,而不仅仅是一个存储库。

但这些事情都不会阻止用户分享,但我敢肯定它发生的次数要少得多。

否则,您将自己限制在(尝试)被动监控滥用行为的机制中。并发下载过多、并发访问过多等。如果您的用户违反了您协议中的 t 和 c,那么您将暂停他们的帐户。但是你必须有非常明显的违规者,因为很容易出错。如果可以的话,这是一个应该避免的模式,因为你总是要追赶,总会有人骗你。

如果他们需要购买 RSA 设备来访问它,没有人会注册一个网站。这不是一个可行的消费者解决方案。


(原始答案)我认为您要查看的是使用客户端证书身份验证。本质上,您的用户在他们的计算机上安装了个人客户端证书,以便当他们连接到您的服务器时,您的服务器可以验证该计算机。

我不会告诉你这很容易,因为它看起来不像。您可能需要设置自己的证书服务器并快速搜索它,但没有一个是漂亮的。

也许,取决于操作系统,那里有一个功能,您可以创建一个特定于机器的证书,或者一个无法导出的证书。

这种事情通常用于服务器之间的安全连接,而不是通常用于您在客户端想要的东西。这将是帮助台的噩梦。

wiki Transport Layer Security或 windowssecurity.com将客户端证书身份验证与 IIS 6.0 网站或 msdn一起使用构建安全的 ASP.NET 应用程序:身份验证、授权和安全通信

您还可以使用RSA 硬件身份验证器

于 2009-04-23T22:31:01.540 回答
2

使用(跟踪)cookies?即使这将基于每个浏览器而不是基于每个机器,当然还需要用户启用持久性 cookie,但这可能就足够了吗?检查 cookie 是否存在并且不应该过期,如果存在,一切都很好而且花花公子 - 如果没有,添加它并在您的后端跟踪它......

通过 IP、网络或任何其他与网络相关的标准屏蔽访问,虽然当然有自己的问题,就像大多数没有固定 IP 的用户一样,或者如果是这样,通过 NAT 的恐怖与许多其他用户共享它,很可能应该是由发布防火墙而不是应用程序本身完成。

通过一个简单的网站从某人的计算机上获取指纹或任何识别信息几乎是不可能的(希望如此),而是需要用户安装本地应用程序或插件。

编辑:新添加的有关原因的信息清楚地表明,任何此类解决方案都会很烦人,并且需要额外的开发和维护成本。完全规避这种限制的需要的答案似乎是最好的。

于 2009-04-23T21:32:59.730 回答
1

如果在某个时间范围内限制足够好 - 即用户在一天、一周或一个月内只能使用五台不同的计算机,您可以随时检查 IP 地址。每次用户尝试访问您的网站时,您可以使用以下算法来查看是否应该允许访问:

1) 检查此用户帐户以前使用过哪些 IP 地址。是否有少于 5 个唯一 IP?是 => 3。否 => 2。

2) 已经存储了五个或更多 IP。其中至少有一个至少一天/一周/一个月大吗?是 => 3。否 => 4。

3) 没关系 - 存储的 IP 少于五个,或者至少一个太旧。删除任何太旧的,存储新的并进行身份验证。=> 5。

4) 不行 - 五个或更多 IP 已经在您的数据库中,而且还没有一个过期。不进行身份验证。=> 5

5) 结束

于 2009-04-23T20:58:20.357 回答
1

这是用于许可方案吗?如果是这样,这是我自互联网问世以来听到的最愚蠢的许可证之一。

这种许可证过去在桌面应用程序环境中有意义,但在基于 Web 的应用程序中没有意义。您的应用程序可能是这些用户使用的唯一具有这种行为方式的应用程序。这对你来说看起来不太好。

于 2009-04-23T21:54:28.633 回答
0

除非我们谈论限制所有在同一个 LAN 上的用户,否则为什么你不能只跟踪用户的 IP 地址,如果他们来自不在他们“列表”中的 IP 地址,那么你可以拒绝他们而不是认证?

于 2009-04-23T20:53:21.493 回答
0
  • 使用带有 MAC 过滤/IP 过滤的防火墙
  • 应用程序中的 IP 白名单
  • Membership Provider 中“登录”用户的阈值

场景是什么,是面向公众的网站还是您要在私有 LAN 上内部托管的东西

于 2009-04-23T20:55:36.370 回答
-1

只有5台特定的计算机吗?或者不超过 5 台同时运行的计算机?这不是一个完美的解决方案,但您可以分别在会话开始/结束时增加/减少计数器。

编辑:好的,在这种情况下,我可能会采用基于 cookie 的方法(同样不完美)。当 PC 连接时,在客户端计算机上存入一个 cookie,并在服务器上记录该 cookie。当#6 尝试连接时,阻止 cookie 并拒绝连接。

于 2009-04-23T20:59:18.810 回答
-2

我认为您应该考虑使用 WCF Web 服务和具有授权的自定义 WinForms/WPF 客户端。

于 2009-04-23T21:24:40.140 回答