【问题标题】:How to secure pass and set session id?如何安全通过并设置会话 ID?
【发布时间】:2011-05-05 07:39:30
【问题描述】:

我正在使用uploadify,并且脚本(使用adobe flash)在请求上传操作url时创建一个新会话而不是使用当前会话。要解决这个问题,我需要提前传递会话 ID。

有没有办法在没有允许会话固定(劫持)的情况下做到这一点?

以下是问题的一些细节: Sessions and uploadify

谢谢!

【问题讨论】:

    标签: php jquery session uploadify session-hijacking


    【解决方案1】:

    在您的脚本中创建一个临时上传会话(未经测试,但您明白能够拥有多个不同的会话):

    <?php
    //normal session
    session_start();
    //store sessionid for retrieval
    $oldsessionid = session_id();
    if($_SESSION['logged_in']){ //or however you check for a valid user
        //stop old/normal session
        session_write_close();   
        //create a new sessionname
        $oldname = session_name('UPLOADSESSION');
        //create a new id (fixed here, you might want a random number/char combo:
        session_id('myuploadsessionid');
        //start the session
        session_start();
        $_SESSION['upload'] = true;
        $uploadid = session_id();
        //now you can use `'data: "artist="+$fi+"&UPLOADSESSION="'.$uploadid` in uploadify
        session_write_close();
    }
    //return to normal name
    session_name($oldname);
    //set old session id
    session_id($oldsessionid);
    //resume normal session
    session_start();
    

    所以,在您的接收脚本中:

    <?php
    session_name('UPLOADSESSION');
    session_id($_POST['UPLOADSESSION']);
    session_start();
    if(isset($_SESSION['upload']) && $_SESSION['upload']){
       //accept files
       //invalidate session after this upload
       $_SESSION['upload'] = false;
    }
    

    用户仍然有 2 个 cookie,并且可能 UPLOADSESSION 是固定的,但您不会将它用于上传之后的任何其他内容,并且仅用于 1 个上传(尽管您可能希望允许更多)。

    或者,您可以在上传后的第一个请求中调用session_regenerate_id();(只需在上传时在$_SESSION 中设置一个标志)。

    【讨论】:

    • 这里用户的会话 id 仍然可见,但仅用于上传操作,对吗?我没有得到的是这将如何防止会话劫持,因为它将显示在代码中。如果会话被劫持,用户仍然无法登录,因为它不是真正的会话(用于登录)但他可以发送文件。我在这里看到的唯一技巧是“上传”标志。但在这种特定情况下,用户可以发送许多文件而无需重新加载整个页面(这就是 uploadify 所做的)。
    • 另外,假设用户进入了上传页面,会话被生成,然后他出于某种原因等待,此时劫持会话的人可以发送文件。这样对吗?我错过了什么吗?
    • 您的观点是session-fixation,这将被阻止(即:如果某人被发送到具有特定帖子/获取变量的 url,它将不是他/她的会话 ID登录会话)。但是,如果您通过非 HTTPS 提供页面,则所有赌注都是,是的,劫持者可以看到要上传的会话 ID,但话又说回来:他当时也可以看到会话 cookie,所以他可以真实登录。把它放在 HTML 中并不比把它放在你的标题中更安全,而且很容易被劫持。要点是:这可以防止通过固定来劫持会话,而不是其他类型的劫持。
    • 那么,如果在没有 https 的情况下启用了通过 url 的 session_id,我总是会遇到麻烦吗?
    • 如果没有HTTPS,无论您使用哪种身份验证和会话方案,无论是通过 URL、POST 还是默认的 COOKIE,您总是会遇到麻烦。默认情况下,您在浏览器中看不到 cookie 标头这一事实并不意味着它们不会像其他 HTML 一样通过 HTTP 以纯文本形式发送。
    猜你喜欢
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2013-09-21
    • 2012-05-07
    • 2012-10-03
    相关资源
    最近更新 更多