我正在尝试编写一个脚本,以防止在我正在构建的网站中进行暴力登录尝试.逻辑是这样的:
sleep(10)然后向用户报告登录失败.在向同事解释这个问题时,我被问到如果黑客在一秒内发送了1000个请求,这将有多大帮助.前5个会立即返回,然后剩下的995只需要10秒吗?
我有一种潜在的怀疑,我不完全理解HTTP是如何工作的 - 甚至可能是上述情况,还是服务器将从一个客户端处理的并发请求数量有限制?
更好的解决方案是增加睡眠时间吗?
sleep($numRequestsInLast5Minutes - 5)
Run Code Online (Sandbox Code Playgroud)
所以前5个会很快,然后每个后续的都会增加睡眠.
所以,我希望获得更多使用高流量网站的经验,但不幸的是,互联网并没有打败我的博客.
如何在我的博客上模拟每秒数十/数百次点击并测试其性能?我在共享服务器上使用SSH帐户托管我的博客.
Heroku现在似乎正在遭受DDoS攻击,这导致整个网站出现间歇性可用性问题(当然!)我的应用程序.
我最近看过很多这类攻击,包括几个月前在Register.com上发生的巨大DDoS攻击.
我的问题是,如果攻击者对Heroku的一个客户进行了归零,会发生什么?
我正在开发一个asp.net MVC Web应用程序,客户端要求我们尽最大努力使其尽可能具有抵御拒绝服务攻击的能力.他们担心该网站可能会收到恶意的大量请求,意图减慢/取消网站.
我已经与产品所有者讨论了这个问题,因为它实际上不属于实际的Web应用程序.我认为托管/网络团队有责任监控流量并响应恶意请求.
但是他们坚持认为应用程序应该内置一些预防措施.但他们不想实施CAPTCHA.
有人建议我们限制在给定时间范围内可以为会话提出的请求数.我在考虑做这样的事情 在ASP.NET MVC中实现请求限制的最佳方法?但是使用会话ID不是客户端IP,因为这会给来自公司防火墙后面的用户带来问题 - 他们的IP都是一样的.
他们还建议添加关闭网站某些区域的功能 - 建议管理员用户可以关闭数据库密集区域......但是这可以通过UI控制,当然如果它是在DOS攻击下管理员用户无论如何都无法达到它.
我的问题是,这样做真的值得吗?当然真正的DOS攻击会更先进吗?
你有什么其他的建议?
我看着https://material-ui-next.com谁似乎在firebase托管上运行并在其上使用CloudFlare.
这提出了一个问题.firebase托管网站是否需要额外的层来处理DDoS保护?据我所知,firebase提供开箱即用的SSL,CDN,DDoS和缓存?什么时候想要在其上添加CloudFlare?
我们通常将IP地址列入黑名单iptables.但是在Amazon EC2中,如果连接通过Elastic Load Balancer,远程地址将被负载均衡器的地址替换,iptables无法使用.在HTTP的情况下,显然找出真正的远程地址的唯一方法是查看HTTP头HTTP_X_FORWARDED_FOR.对我来说,在Web应用程序级别阻止IP并不是一种有效的方法.
在这种情况下,防御DoS攻击的最佳做法是什么?
在本文中,有人建议我们可以用HAProxy替换Elastic Load Balancer.但是,这样做有一些缺点,我试图看看是否有更好的选择.
我有一个想要开发和发布的网站的想法.这是一个Web应用程序,我想在某种形式的基于云的Web托管服务上实现(即Google App Engine,Amazon Web Services,我可能不知道的其他...)
我的问题是,即使我的项目是100%合法的,而不是阴暗的,它也很容易受到偶尔的DDOS攻击.
我之前为GAE开发过,我对此非常偏向.但是,我似乎无法发现Google服务具有任何形式的集成DDOS保护.事实上,Google的文档说明如果您认为自己经历过DDOS攻击,那么您必须提供他们将要研究的举证责任.如果他们认为您受到了攻击,他们将退还您的使用费.否则,你就自己离开了.
是否有更好的,基于云的托管替代方案?我有自己的偏好,但我没有嫁给任何特定类型的架构或编程语言.
对于DDOS保护,我最好的基于云的Web托管选项是什么?
您能否列出一些策略甚至已经应用的方法来预防/保护/最小化对Restful Web Services的DDOS攻击?
谢谢.
我为我的网站实现了一个简单的聊天,用户可以通过ExpressJS和Socket.io互相交流.我添加了一个简单的保护,免受ddos攻击,这可能是由一个人发送垃圾邮件引起的,如下所示:
if (RedisClient.get(user).lastMessageDate > currentTime - 1 second) {
return error("Only one message per second is allowed")
} else {
io.emit('message', ...)
RedisClient.set(user).lastMessageDate = new Date()
}
Run Code Online (Sandbox Code Playgroud)
我用这段代码测试了这个:
setInterval(function() {
$('input').val('message ' + Math.random());
$('form').submit();
}, 1);
Run Code Online (Sandbox Code Playgroud)
当节点服务器始终启动时,它可以正常工作.
但是,如果我关闭节点服务器,然后运行上面的代码,并在几秒钟内再次启动节点服务器,事情变得非常奇怪.然后突然,数百条消息被插入窗口,浏览器崩溃.我假设这是因为当Node服务器关闭时,socket.io正在保存所有客户端发出,并且一旦检测到Node服务器再次联机,它就会异步推送所有这些消息.
我怎样才能防止这种情况发生?这到底发生了什么?
编辑:如果我使用节点内存而不是Redis,这不会发生.我猜测因为服务器充满了READ并且许多READ在RedisClient.set(user).lastMessageDate = new Date()完成之前发生.我想我需要的是原子READ/SET?我正在使用此模块:https://github.com/NodeRedis/node_redis用于从Node连接到Redis.
问题:
当我的网站设置为“我受到攻击”模式时,一旦用户通过 CloudFlare 屏幕,他们就会被重定向到我的网站,并使用一个大而长的查询获取参数:
?__cf_chl_jschl_tk__=63c51316f61a63e46f1639d6cf43f9d9b536adea-1587754610-0-AV-peahelegQeMeSrc_4ZJBUq47gdkX_QiS2eERoRTEODUjwbib2MM_73nQDAhukLbkspNpj01mv-Z-JteR4MpY4LUMm-yLJrPQKTX74DGYbZIs2utbp3_q4uozgzKpqcax10YESVKDhZgaWQYHGqBL9koIoasVOzKyvU7VQuKT1Nieo-i8DdXrV0IQf-nyI8KgWnxhYSVBOc-4WNrZzHQlEXFOpV45AGs10aMJyrs376HLRhNdV05MCj8oqMrexuQDtY7B3p7riHByYdB7GIgc
Run Code Online (Sandbox Code Playgroud)
为什么这是不好的:
建议的解决方案:
我认为避免这种情况的方法是检查是否设置了获取参数,然后重定向回删除参数的同一页面。(确保在设置时不会丢失任何其他查询参数)
我写了一个函数来实现这一点:
function checkAndRemoveCloudFlareParams() {
if (isset($_GET['__cf_chl_jschl_tk__']) && ! empty($_GET['__cf_chl_jschl_tk__'])
|| isset($_GET['__cf_chl_captcha_tk__']) && ! empty($_GET['__cf_chl_captcha_tk__'])) {
$new_uri = '?';
$uri = explode('?', $_SERVER['REQUEST_URI']);
$uri = $uri[0];
// Get any other params to put back on later
foreach ($_GET as $key => $var) {
if ($key !== '__cf_chl_jschl_tk__' && $key !== '__cf_chl_captcha_tk__') {
$new_uri .= $key . '=' …Run Code Online (Sandbox Code Playgroud) ddos ×10
security ×4
cloudflare ×2
php ×2
amazon ×1
amazon-ec2 ×1
apache ×1
asp.net-mvc ×1
brute-force ×1
c# ×1
cdn ×1
cloud ×1
heroku ×1
iptables ×1
javascript ×1
nginx ×1
node.js ×1
rest ×1
simulate ×1
socket.io ×1
ssl ×1