我有一个运行Classic-ASP的站点,并且在登录页面上我想延迟对失败登录尝试(类似于10秒)的响应,以帮助防止对帐户进行强力攻击。如何延迟经典ASP中的响应
快速谷歌搜索显示一些使用SQL服务器查询看起来破解的黑客。
有没有一种很好的方法来做到这一点在经典的ASP?
我有一个运行Classic-ASP的站点,并且在登录页面上我想延迟对失败登录尝试(类似于10秒)的响应,以帮助防止对帐户进行强力攻击。如何延迟经典ASP中的响应
快速谷歌搜索显示一些使用SQL服务器查询看起来破解的黑客。
有没有一种很好的方法来做到这一点在经典的ASP?
我不打算回答您的具体问题,正如很多人已经这样做了,但是防止暴力攻击的方法有很多。
例如:
Response.End
来结束响应。只是说有其他选择,通过锁定一些资源并等待,将不必要的负载加载到您的服务器上。
显然,在硬件层 - 防火墙等这样做是首选的选择。
在纯ASP中没有简单的方法。
SQL WAITFOR,或在VB中创建简单的ActiveX组件(或任何其他)睡觉。
请注意,这会增加服务器上的负载。沉睡的请求使内存和连接消耗无用。
有Response.Buffer选项,你可以用它来告诉它延迟返回响应,直到页面完成处理,所以你也许可以结合脚本中的某种超时,但它不会尤其是优雅的,特别是VBScript并没有真正为你提供一种让线程进入睡眠的方式,所以你最终可能会颠簸CPU。
也许最好在客户端使用服务器端会话和javascript,所以客户端会延迟请求,服务器只会在预期延迟结束后发送响应。这应该提供一些服务器端的安全措施,并且可以用于那些不试图混淆你的系统的用户...
还有另一种方法,但要记住上述关于国内消耗资源的警告。这里是一个办法,虽然
Sub DelayResponse(numberOfseconds)
Dim WshShell
Set WshShell=Server.CreateObject("WScript.Shell")
WshShell.Run "waitfor /T " & numberOfSecond & "SignalThatWontHappen", , True
End Sub
不会对W10 Pro的IIS – 2017-03-08 12:38:36
有通用VBScript中WScript.Sleep方法,但是,这并不会在ASP的环境中工作。
有许多其他机制可以用来实现这一点,但是,它们都是有效的“解决方法”,因为没有内建的方法可以干净地导致ASP页面(运行VBScript)自行暂停。
在这里看到:
How do I make my ASP page pause or 'sleep'?
具体回答您的问题:
是否有 传统的ASP来做到这一点的好办法?
号有这样做没有好方式,只有有可使用的“下锅tastic”黑客,但是他们带来的种种副作用和注意事项。 (请参阅“如何让我的ASP页面暂停或'睡眠'?”链接用于特定的内存吃饭,页面错误令人讨厌的副作用)
避免蛮力攻击而不使用IP限制的其他方法是在同一用户的第二次失败尝试后提供验证码。 Google就是这样做的。
This is how Google does it http://img692.imageshack.us/img692/3231/capturecy.jpg
您可以使用:
<html>
<head>
<title>Sleep</title>
</head>
<body>
<%
function Sleep(seconds)
set oShell = CreateObject("Wscript.Shell")
cmd = "%COMSPEC% /c timeout " & seconds & " /nobreak"
oShell.Run cmd,0,1
End function
Sleep(5)
response.write("End")
%>
</body>
</html>
这一个适用于W10 Pro – 2017-03-08 12:42:21
<%
set shell = CreateObject("WScript.Shell")
t1 = timer()
sleep(5)
t2 = timer()
response.write "waited "& t2-t1 &" secs"
function sleep(seconds)
if seconds>=1 then shell.popup "pausing",seconds,"pause",64
end function
%>
请学习如何正确格式化您的代码。这里很重要。 – Will 2012-04-30 13:29:40
我使用这个:
function sleep(scs)
Dim lo_wsh, ls_cmd
Set lo_wsh = CreateObject("WScript.Shell")
ls_cmd = "%COMSPEC% /c ping -n " & 1 + scs & " 127.0.0.1>nul"
lo_wsh.Run ls_cmd, 0, True
End Function
sleep(5) 'wait for 5 seconds
再见:-)
为响应“延迟回应“的一部分哟乌尔问题:
dim SecondsToWait : SecondsToWait = 4
dim StartTime : StartTime = Time()
Do Until
DateDiff("s", StartTime, Time(), 0, 0) > SecondsToWait
Loop
纯传统的ASP没有SQL和WScript的壳牌,但调试延迟仅供参考。这是测试的一个片段(非常有趣),但它没有解决你的问题的“好方法”部分
这个答案为了完整性和寻找(调试)延迟的人。失败的登录尝试不应该像这样处理。
通过使用此代码可以延迟asp响应的另一种方法。
Sub MyDelay(NumberOfSeconds)
Dim DateTimeResume
DateTimeResume= DateAdd("s", NumberOfSeconds, Now())
Do Until (Now() > DateTimeResume)
Loop
End Sub
使用此代码调用此函数。
Call MyDelay(5)
等待当然还有其它的方法,与基于IP阻塞的问题是,用户常常在大公司将显示为来自同一IP的到来,使基于IP块可能影响比预期更多的人。源IP可以简单地伪造,使这种方法呈惰性。 – 2010-02-10 16:21:34
是的,我知道Bert,代理人和所有这些,甚至可以被欺骗。然而,蛮力攻击往往也使用特定的用户名,为此他们尝试登录,所以X登录在Y秒内尝试用户'管理员',只是告诉他们去徒步旅行。无论IP或任何东西。这是在一个时间范围内重复登录同一用户名的尝试,这显然是一个自动化的Web请求,可以识别这一点。修改我的答案以反映这一点。 – 2010-02-10 17:04:59
+1,很好的答案,但我会用强烈的术语来说明延迟响应解决方案。每次使用新会话的强力尝试都可以用许多并行请求来执行,因此这样的攻击可能实际上成为意外的DOS攻击。 – AnthonyWJones 2010-02-11 10:09:13