我正在构建一个ASP.NET应用程序。其中一个要求是限制用户可以访问网站内容的不同计算机的数量(例如5台计算机)。它不一定是完美的,如果没有IT知识的普通用户将无法省略检查 - 解决方案将是K.
我正在考虑获取用户机器的指纹的方法(例如:MAC和compuetr名称的组合)。当然,用户将被告知检查他们的MAC。 但是,很难做到,因为HTTP协议是无状态的。一种解决方案是使用ActiveX。但它仅限于Windows系统,并且很容易通过安全检查(通过禁用ActiveX,据我所知,默认情况下禁用)。
正如我用Google搜索,这是一个非常常见的问题,但除了使用ActiveX之外没有其他解决方案。有没有人遇到过这种问题,并找到了一些好的解决方案?
用户可以在不同的网络中。它将是一个外联网应用程序,因此检查IP将不起作用(路由器和动态IP)。
编辑:这样做是为了避免购买会员资格,然后将帐户数据分享给所有朋友。答案 0 :(得分:3)
根据您的评论
这种要求的意义在于避免用户在应用程序中注册,支付会员费用以及向其他人提供帐户凭据。
要么像RSA hardware authenticators
那样昂贵且高度安全-OR -
您更改业务模式并使其无法共享凭据。例如由于成本 - 我不分享我的苹果或亚马逊信誉,因为我不想支付他们的购买。另一个是拥有用户社区。没有人分享他们的flickr帐户,因为这些照片是他们的艺术照片,并且他们不希望任何人为了几美元而捣乱他们的东西。分享被劝阻,因为它是一个社区,而不仅仅是一个存储库。
但这些都不会阻止用户分享,但我确信它的发生情况要少得多。
否则,您将自己局限于(尝试)被动监控滥用行为的机制。并发下载次数太多,并发访问次数太多等。如果您的用户违反协议的t和c,则暂停其帐户。但你必须有非常明显的罪犯,因为这很容易弄错。如果可以的话,这是一个可以避免的模型,因为你总是会发挥追赶,并且总会有人扯掉你。
如果他们需要购买RSA设备来访问网站,则没有人会注册该网站。它不是一个可行的消费者解决方案。
(原始答案) 我想你想看的是使用客户端证书身份验证。基本上,您的用户在其计算机上安装个人客户端证书,这样当他们连接到您的服务器时,您的服务器就可以验证该计算机。
我不会告诉你这很容易,因为它看起来不像。您可能需要设置自己的证书服务器并快速搜索它,它们都不是很好。
也许,OS依赖,那里有一个功能,你可以创建一个机器特定的证书,或一个无法导出的证书。
这类事情通常用于服务器之间的安全连接,而不是通常用于客户端的所需内容。这将成为帮助台的噩梦。
wiki Transport Layer Security或windowssecurity.com Using Client Certificate Authentication with IIS 6.0 Web Sites或msdn Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication
您也可以选择使用RSA hardware authenticators
的路线答案 1 :(得分:2)
使用(跟踪)Cookie?即使这是基于每个浏览器而不是基于每个机器,并且当然要求用户启用持久性cookie,它可能已经足够好了吗?检查cookie是否存在且不应该过期,如果它确实存在,那么一切都很好 - 如果没有,请添加它并在后端跟踪这个...
通过IP,网络或任何其他与网络相关的标准进行屏蔽访问,当然像大多数没有固定IP的用户一样有自己的问题,或者如果是,通过NAT的恐怖与许多其他用户共享它,应该很可能是由发布防火墙而不是应用程序本身完成的。
通过一个简单的网站从某人的计算机上获取指纹或任何识别内容应该是不可能的(人们希望),而是需要用户安装本地应用程序或插件。
编辑:有关原因的新增信息清楚地表明,任何此类解决方案都会令人烦恼,并且需要额外的开发和维护费用。关于绕过这种限制的必要性的答案似乎是最好的。
答案 2 :(得分:1)
如果在一定时间范围内限制足够好 - 也就是说,用户一天,一周或一个月只能使用五台不同的计算机,您可以随时检查ip地址。每次用户尝试访问您的网站时,您都可以使用以下算法来查看是否应允许访问:
1)检查以前曾使用此用户帐户的IP地址。是否少于5个独特的IP?是=> 3.否=> 2。
2)已经存储了五个或更多IP。他们中至少有一天至少有一天/周/月?是=> 3.否=> 4。
3)没关系 - 存储的IP少于五个,或者至少有一个太旧了。删除任何太旧的,存储新的并进行身份验证。 => 5。
4)不行 - 您的数据库中已有五个或更多IP,但尚未过期。不要进行身份验证。 => 5
5)结束
答案 3 :(得分:1)
这适用于许可方案吗?如果是这样的话,那是自互联网问世以来我听说过的最愚蠢的许可证之一。
这是在桌面应用程序环境中有意义的许可证,但在基于Web的应用程序中毫无意义。您的应用程序可能是这些用户使用的唯一一种行为方式。这对你来说不太好。
答案 4 :(得分:0)
除非我们讨论的是限制同一局域网用户,否则为什么不能只跟踪用户的IP地址,如果他们来自不在“列表”中的IP地址,那么你可以将它们转为离开而不是认证?
答案 5 :(得分:0)
这个场景是什么,它是面向公众的网站还是你将在私人局域网内部托管的东西
答案 6 :(得分:-1)
只有5台特定的电脑吗?或者不超过5台同步电脑?这不是一个完美的解决方案,但您可以分别在会话开始/结束时递增/递减计数器。
编辑:好的,在那种情况下,我可能会采用基于cookie的方法(再次不完美)。当PC连接在客户端计算机上存放cookie时,记录在服务器上发布的cookie。当#6尝试连接时,阻止cookie并拒绝连接。答案 7 :(得分:-2)
我认为您应该考虑使用WCF Web服务和自定义WinForms / WPF客户端。