当前位置: 首页 > 面试题库 >

如何使用Socket.io防范Node.js中的分布式拒绝服务攻击?

贡和裕
2023-03-14
问题内容

我最近一直在学习node.js和socket.io。我的问题是如何保护服务器免受客户端攻击?

这是我的服务器代码

io.sockets.on('connection', function (socket) { 
//users.push(socket);       
socket.on('message', function (data) {

    socket.on('disconnect', function () { });

    socket.on('bcast', function (data) {        
        socket.emit('news', { 'data': data });
        socket.broadcast.emit('news', { 'data': data });     
    });

    socket.on('login', function(data){
      socket.emit('login', {'data': [ socket.id, data ] });
    });
   });
 });

例如,如果客户使用chrome开发人员工具来编写流畅的代码

 for(var i = 0; i<99999999999; i++)
 {
        socket.emit('bcast', {data: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'});
 }

它会杀死服务器。


问题答案:

研究JS事件的节流和反跳!

这些技术将帮助您防止和检测到特定程度的攻击(在我看来,这足以用于小型多人套接字游戏)…

编辑:

在此jsfiddle中:http :
//jsfiddle.net/y4tq9/9/

var sIO = {};

sIO.on = (function(){
    var messages = {};
    var speedLimit = 5; //5ms
    return function(message, handler) {
        messages[message] = messages[message] || {};
        if(messages[message].timestamp && new Date().getTime() - messages[message].timestamp < speedLimit) return false;
        else messages[message].timestamp = new Date().getTime();

        handler();
        return true;
        //execute code, Ex:
    }
}());

您会看到每个发送速度超过5ms的请求都将返回false,否则处理程序将运行。

您可以简单地断开发送请求的套接字,这些套接字的发送速度超过5毫秒(或2毫秒或3毫秒,具体取决于您的网络和应用程序的权重…)。

您不妨在客户端站点上使用js事件限制,以确保所有请求的发送速度都不会超过速度限制!

这项技术不会提供绝对的保护以防止被利用,但是它将防止您的服务器在攻击者尝试执行Dos时崩溃。



 类似资料:
  • 拒绝服务(DoS)攻击是黑客企图使网络资源不可用的一种攻击。它通常会临时或无限地中断主机,让正常使用的用户无法访问目标服务。这些攻击通常针对托管在关键任务Web服务器(如银行,信用卡支付网关)上的服务。 DoS的症状 网络性能异常缓慢。 特定网站不可用。 无法访问任何网站。 收到的垃圾邮件数量大幅增加。 长期拒绝访问网络或任何互联网服务。 特定网站不可用。 动手实践 第1步 - 启动WebGoat

  • 本文向大家介绍如何防范SQL注入式攻击?相关面试题,主要包含被问及如何防范SQL注入式攻击?时的应答技巧和注意事项,需要的朋友参考一下 好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。 ⑴ 对于动态构造SQL查询的场合,可以使用下面的技术: 第一:替换单引号,即把

  • 本文向大家介绍Cookie如何防范XSS攻击?相关面试题,主要包含被问及Cookie如何防范XSS攻击?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: XSS(跨站脚本攻击)是指攻击者在返回的HTML中嵌入javascript脚本,为了减轻这些攻击,需要在HTTP头部配上,set-cookie: httponly-这个属性可以防止XSS,它会禁止javascript脚本来访问cookie。

  • 假设我需要实现一个有大量并发用户的web应用程序。我决定使用node.js,因为它的伸缩性很好,它有很好的性能,开源社区等等,等等。然后,为了避免瓶颈(因为在同一个事件循环中可能有大量用户),我决定使用一个进程集群来利用多核CPU。此外,我有3台机器(main 2 ),因为我需要用Cassandra处理大数据。太棒了,这意味着我有3*n个node.js进程,其中n是cpu的核心数(机器是相同的)。

  • 问题内容: 我正在尝试通过SSL连接使用socket.io设置服务器到服务器的链接。这是我的例子: 在没有SSL的情况下运行时,代码工作正常。我怀疑这可能是我的自签名证书未被接受,但是我不知道如何使客户接受它。 请告诉我如何:1.接受自签名SSL证书。或2.以其他方式帮助我完成这项工作。 提前致谢。 问题答案: 经过更多搜索后,将其添加到客户端中使其可以工作: require(’https’)。g

  • 本文向大家介绍Yii2的XSS攻击防范策略分析,包括了Yii2的XSS攻击防范策略分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii2的XSS攻击防范策略。分享给大家供大家参考,具体如下: XSS 漏洞修复 原则: 不相信客户输入的数据 注意: 攻击代码不一定在<script></script>中 ① 将重要的cookie标记为http only, 这样的话Javascript 中