Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js passportjs上的会话劫持_Node.js_Express_Passport.js - Fatal编程技术网

Node.js passportjs上的会话劫持

Node.js passportjs上的会话劫持,node.js,express,passport.js,Node.js,Express,Passport.js,我想知道如何使用passportjs防止会话劫持,目前,如果我将cookie复制并粘贴到另一个浏览器中,我就可以访问所有内容。会话劫持是一种攻击,在这种情况下,通过窃取会话cookie(或通常的会话ID)进行攻击。将cookie复制/粘贴到另一个客户端确实会窃取会话,这就是它应该如何工作的 防止会话劫持的要点是确保Cookie不会被中间人截获,实现这一点的最佳方法是使用HTTPS/SSL。 此外,您应该刷新会话id(例如使用“session.regenate”):这使得攻击者很难在用户获得新会话

我想知道如何使用passportjs防止会话劫持,目前,如果我将cookie复制并粘贴到另一个浏览器中,我就可以访问所有内容。

会话劫持是一种攻击,在这种情况下,通过窃取会话cookie(或通常的会话ID)进行攻击。将cookie复制/粘贴到另一个客户端确实会窃取会话,这就是它应该如何工作的

防止会话劫持的要点是确保Cookie不会被中间人截获,实现这一点的最佳方法是使用HTTPS/SSL。
此外,您应该刷新会话id(例如使用“session.regenate”):这使得攻击者很难在用户获得新会话id之前窃取并使用该会话id

除了这些基本的事情,你几乎什么都做不了。保护cookie应该是客户端的任务,而不是应用程序的任务


顺便说一句,不要尝试将会话链接到用户IP,因为对于从多个IP连接的用户来说,这可能会令人沮丧(这在公司、大学等中很常见)。在我看来,唯一没有太多“副作用”的是将会话链接到浏览器的用户代理。虽然攻击者可以很容易地欺骗它,但它仍然提供了稍微多一点的保护——有总比没有好。

会话劫持是一种攻击,在这种情况下,它通过窃取会话cookie(或通常的会话ID)来工作。将cookie复制/粘贴到另一个客户端确实会窃取会话,这就是它应该如何工作的

防止会话劫持的要点是确保Cookie不会被中间人截获,实现这一点的最佳方法是使用HTTPS/SSL。
此外,您应该刷新会话id(例如使用“session.regenate”):这使得攻击者很难在用户获得新会话id之前窃取并使用该会话id

除了这些基本的事情,你几乎什么都做不了。保护cookie应该是客户端的任务,而不是应用程序的任务


顺便说一句,不要尝试将会话链接到用户IP,因为对于从多个IP连接的用户来说,这可能会令人沮丧(这在公司、大学等中很常见)。在我看来,唯一没有太多“副作用”的是将会话链接到浏览器的用户代理。虽然攻击者可以很容易地欺骗它,但它仍然提供了稍微多一点的保护——有总比没有好。

我不使用passport,但基本上有三种主要方法可以保护cookie不被劫持:

  • HTTPS/SSL:这可以防止网络窥探者简单地从网络中拾取cookie。允许您在站点上免费使用SSL。每月的第一个1GB是免费的,之后他们只收取大约1%的每GB费用。还提供免费SSL,但您必须每月支付大约10美元的费用
  • 加密/签署Cookie:这会阻止人们修改您的Cookie。Express cookie解析器能够对cookie进行签名,但不会对其进行加密。我不是一个速成专家,但基本上你需要的东西,实现了。为此,您可能必须实现自己的代码
  • 浏览器验证:这是您的主要问题。如果有人将cookie复制并粘贴到另一个浏览器中会发生什么。您可以将各种指纹信息存储在cookie(即浏览器|浏览器主要版本|处理器| ISP |等)中,并在未匹配时拒绝cookie。例如,如果国家不同,则应拒绝会议
  • 示例:

    function validate(req, session) {
        if ( 
          getISP(req) !== session.isp ||
          getSimplifiedUA(req) !== session.ua ||
          // More tests...
        )
            return false
    
        return true;
    }
    
    app.use(function(req, res, next) {
        if( req.session && !validate(req, req.session) ) {
            return req.session.regenerate(function(err) {
                if ( err ) return next(err);
                req.session.isp = getISP(req);
                req.session.ua = getSimplifiedUA(req);
                next();
            });
        }
    
        next();
    });
    
    app.use('/', function(req, res, next) {
        // Render something...
    });
    

    我不使用passport,但基本上有三种主要方法可以防止cookie被劫持:

  • HTTPS/SSL:这可以防止网络窥探者简单地从网络中拾取cookie。允许您在站点上免费使用SSL。每月的第一个1GB是免费的,之后他们只收取大约1%的每GB费用。还提供免费SSL,但您必须每月支付大约10美元的费用
  • 加密/签署Cookie:这会阻止人们修改您的Cookie。Express cookie解析器能够对cookie进行签名,但不会对其进行加密。我不是一个速成专家,但基本上你需要的东西,实现了。为此,您可能必须实现自己的代码
  • 浏览器验证:这是您的主要问题。如果有人将cookie复制并粘贴到另一个浏览器中会发生什么。您可以将各种指纹信息存储在cookie(即浏览器|浏览器主要版本|处理器| ISP |等)中,并在未匹配时拒绝cookie。例如,如果国家不同,则应拒绝会议
  • 示例:

    function validate(req, session) {
        if ( 
          getISP(req) !== session.isp ||
          getSimplifiedUA(req) !== session.ua ||
          // More tests...
        )
            return false
    
        return true;
    }
    
    app.use(function(req, res, next) {
        if( req.session && !validate(req, req.session) ) {
            return req.session.regenerate(function(err) {
                if ( err ) return next(err);
                req.session.isp = getISP(req);
                req.session.ua = getSimplifiedUA(req);
                next();
            });
        }
    
        next();
    });
    
    app.use('/', function(req, res, next) {
        // Render something...
    });
    

    欢迎来到堆栈溢出。请提供有关如何生成会话cookie的更多信息。谢谢Michal。我遵循了本教程,您的代码在哪里?你不能指望人们去阅读教程来回答你。抱歉,伙计:(这里是我的代码,我尝试创建一个会话。在返回完成之前重新生成(null,用户);但不起作用欢迎使用堆栈溢出。请提供有关如何生成会话cookie的更多信息。谢谢Michal。我遵循了本教程,您的代码在哪里?您不能期望人们阅读教程来回答您的问题。抱歉,男士:(这是我的代码,我尝试创建会话。在返回完成之前重新生成(null,用户)我知道最好的方法是使用HTTPS/SSL,如果我尝试将会话链接到IP也是一个坏主意,我未来的飞机将使用HTTPS/SLL,但现在我不能,我只想知道如何使用会话。用我的代码重新生成,我昨天尝试了一整天,但我失败了。顺便说一句,谢谢你的回答,祝你好运d日男子:D@A