【发布时间】:2021-11-12 00:10:56
【问题描述】:
我们有一个 asp.net 公共网络服务供现有客户订购产品:
https://www.example.com/webservices/customers/webservice.asmx?op=OrderProduct
一些字段是:
<CustomerEmailAddress>string</CustomerEmailAddress>
<CustomerPassword>string</CustomerPassword>
<ProductCode>string</ProductCode>
<Quantity>string</Quantity>
<Color>string</Color>
我们使用 CustomerEmailAddress 和 CustomerPassword 来检查客户是否合法。
问题:我们如何阻止非客户尝试猜测 CustomerPassword 和 CustomerEmailAddress(包括这样做的恶意自动化脚本)?
我们曾考虑在 100 次错误密码尝试后锁定客户帐户,但如果某些脚本试图猜测它,那么合法客户可能会阻止他们的帐户(即使不是他们试图访问它)。
我们也曾考虑按 IP 地址计算访问尝试,但我们不确定是否有人可以伪造 IP 地址。我们也不确定如果他们将脚本分发到数千台计算机会发生什么。
更新
我认为与其关注或惩罚特定的 CustomerEmailAddress,不如只关注一个反复弄错 CustomerEmailAddress 或 CustomerPassword 的 IP 地址。例如。 100次失败后,封IP一天。然后一周等等。
这样特定 CustomerEmailAddress 的帐户就不会被阻止。
【问题讨论】:
-
对问题的回答 1)你不能 2)只要是解锁的过程,我看不出问题,如果这样做,我会更倾向于去降低尝试次数(例如 5 次)。 3) 与 1 和 2 的答案相同。 4) 有很多选择,但取决于您的确切上下文、基础设施以及您想要投入多少工作。OAuth2、身份、SSO 服务(Facebook、Google 等)只是其中的几个起点。您可能需要进行研究,看看有什么适合您的需求
-
避免重新发明轮子。除非您有真正独特的要求(非常不可能),否则请使用现有的身份验证/授权工具链。例如。 Identity Core 支持不记名令牌以及其他方法。
-
@Richard 这是一个 ASP.NET 4.5 网站,而不是 .net 核心。我想知道是否有 ASP.NET 4.5 的不记名令牌示例。
-
@user1946932 变得更加困难。核心还有其他显着优势(一开始是性能),应该考虑升级,特别是考虑到 4.5 i 不支持(现在已经有一段时间了)。
标签: c# asp.net .net vb.net web-services