0

如果用户尝试登录超过 6 次,我会尝试阻止访问我的网站。我目前正在使用此代码来获取客户端 IP 地址以阻止他的访问:

string strHostName = System.Net.Dns.GetHostName();
string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();

问题是这将返回公共 IP 地址。如果我使用此地址,我可能会阻止对整个客户端网络的访问。

有什么方法可以只阻止尝试登录的用户吗?

4

1 回答 1

0

简短的回答:没有。您可以在请求标头中验证的大多数其他内容都可以被客户端浏览器欺骗,因此很容易更改。

最好的方法是阻止来自相同 IP 地址/范围的登录尝试,而不是阻止。一旦最近有来自同一 IP 的多次错误登录尝试,您可能会引入人为延迟。例如,记录每次尝试服务器端并在每次后续登录尝试时检查此日志 - 如果在过去 2 分钟内有超过 5 次登录失败,则让您的应用程序在返回响应之前等待 2 秒。这将显着降低任何自动暴力攻击的有效性,同时允许同一公共 IP 上的合法用户访问其帐户。

于 2013-08-02T08:53:30.153 回答