c# - ASP.NET 网络服务安全?
问题描述
我们有一个 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 就不会阻止他们的帐户。
解决方案
两因素身份验证也会有我的投票,最好的安全性。
如果无法使用电子邮件/短信/文本,则可以选择基于时间的一次性密码。
100 次尝试 IP 阻止,可以临时设置:
前 100 次失败尝试锁定 X 分钟。
第二个 100 失败尝试锁定 X*2 分钟。
等等
如果成功,重置计数
推荐阅读
- python - 使用 LSTM 进行序列分类,检查输入时出错
- php - laravel 多对多关系枢轴数据保存为空
- javascript - 如何删除textarea中的自定义文本?
- database - 从前端用户的表单输入详细信息中获取数据库结果
- android - 启用缩小时 Google Places API 自动完成错误
- angular - 库组件中Domsanitizer的依赖注入
- python - 设计一种算法来找到两条路径之间的平均距离
- build - 在生产模式下构建会导致空白页面,而在开发模式下构建可以完美运行(Angular 8)
- java - 使用 Guava 的 EventBus 的注意事项
- java - AsyncTask 与
- java.lang.Object[] 不能转换为 java.lang.String[]