我正在构建一个用户输入促销代码的网站。没有用户身份验证,但我想阻止某人通过强力进入促销代码。我不允许使用验证码,所以考虑使用IP地址阻止过程。如果用户输入促销代码的X次尝试失败,该网站将阻止用户的IP地址达X个时间。
在实施这样的事情时是否存在明显的问题?
答案 0 :(得分:2)
阻止IP地址是一个坏主意,因为该IP地址可能是公司http代理服务器的地址。 大多数企业/机构使用网关连接到互联网。在这种情况下,您看到的IP地址是网关,N个用户可能是后面的。如果由于该网络中的一个用户造成的麻烦而阻止此IP地址,则基于IP的阻止还将使您的站点对其他N个用户不可用。在一台计算机在一台路由器后面进行NAT处理的情况下也是如此。
场景2:如果说同一网络中的X用户无意中在Y分钟限制内提供了错误的代码,该怎么办?该网络中的所有用户再次被阻止以输入更多代码。
您可以使用基于cookie的系统,在该系统中存储过去Y分钟在cookie中(或在服务器端的会话变量中)的尝试次数,并且每次都进行验证。但是,这不是万无一失的,因为知道您的实现的用户也可以绕过它。
答案 1 :(得分:1)
如果您是IIS 7,那么实际上有一个扩展程序可以帮助您准确地完成您所说的内容。
http://www.iis.net/download/DynamicIPRestrictions
这可以帮助您避免尝试通过代码实现此功能。至于任何“明显的问题”,这类事情一直在进行,以防止对Web应用程序的暴力攻击。我想不出为什么真正的用户需要尝试以与发出暴力攻击的计算机相同的方式输入代码的任何理由。测试任何和所有可能的用户体验都可以帮助您解决可能出现的任何问题。
答案 2 :(得分:0)
- 如果它没有链接到商店,请不要考虑这个 -
想在您的订单上放置一个隐藏的标签吗?不是100%万无一失,但它会阻止一些暴力。
你需要检查的是,隐藏的标签是否会弹出大量的促销代码来阻止订单。
我仍然建议您设置某种登录方式。
答案 3 :(得分:0)
我认为没有一种解决方案可以解决您的所有问题,但如果您想减慢暴力攻击只是在页面加载中添加几百毫秒的延迟会做很多事情!
您还可以强制他们首先访问您输入代码的页面,在那里您可以添加带有值的隐藏字段并在会话中存储相同的值,当用户验证您将隐藏字段与会话价值。
通过这种方式,您可以强制攻击者发出两个请求而不是一个请求,您还可以测量这两个请求之间的时间,如果它低于设定的时间,您可以或多或少地保证它的机器人。