【问题标题】:Session_id is visible in page source, is it ok?Session_id 在页面源中可见,可以吗?
【发布时间】:2011-10-03 09:07:21
【问题描述】:

我正在使用 javascript 发送 session_idsession_id 在页面源代码中可见,例如:

function startUpload(id){
    var queryString = '&' + $('#new_doc_upload').serialize() + "&session_id=" + "01dfda2def225bae907b129d2ffb1";
    $('#fileUpload').fileUploadSettings('scriptData',queryString);
    $('#fileUpload').fileUploadStart();
}

session_id 是可见的,还是安全问题? 谢谢。

【问题讨论】:

  • 你为什么需要它?
  • @Jamie 我正在尝试使用生成新 session_id 的 flash 上传器(uploadify)发送一些会话数据,所以我无法访问我的会话数据。
  • 我不明白为什么您的会话 ID 在您的示例中是硬编码的。它确实会不时改变,不是吗?
  • @qeek 好吧,是的,它没有硬编码。这段代码来自页面源,只是显示了当前的id。

标签: php javascript jquery security session


【解决方案1】:

我认为这完全没问题。我的理由是 PHP 以明文形式发送它,当您使用会话时浏览器也是如此。以下是您发出网络请求时在后台发生的情况:

> GET / HTTP/1.1
Host: example.com
Accept: */*

< HTTP/1.1 200 OK
< Date: Tue, 12 Jul 2011 07:00:26 GMT
< Server: Apache
< Set-Cookie: PHP_SESSID=2873fd75b29380bc9d775e43e41dc898; path=/; domain=example.com; secure
< P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
< Vary: Accept-Encoding
< Content-Length: 5538
< Content-Type: text/html; charset=UTF-8

如您所见,我发出了一个 GET 请求,服务器响应 Set-Cookie: PHP_SESSID= 后跟我的会话 ID。任何“嗅探”请求并且能够在 JavaScript 中看到会话 ID 的人也能够从标头中获取它。唯一需要担心的是恶意浏览器插件和其他不太可能但可以通过正确保护代码来避免的漏洞。

我建议您查看http://phpsec.org/projects/guide/4.html,了解有关会话劫持的一些提示和信息。

【讨论】:

    【解决方案2】:

    我认为这不是严重的问题,但仍然没有正确编码。如果可能的话,不应该让任何人知道 id。从您的代码看来,您已经对您的 id 进行了编码。您应该在编码中添加更多信息来制作更安全。

    举个例子 可以轻松解码“encode(15)”,但很难解码“encode('php is great'.15.' codint language')”;

    【讨论】:

      【解决方案3】:

      我最近在做一个谷歌地球插件项目时这样做了。它没有使用浏览器的 cookie,所以我必须使用从 html 中获取的 javascript 在 url 中传递会话变量。没有安全问题。

      【讨论】:

        【解决方案4】:

        不,我不认为这没关系。您正在使 session_id 易于访问,从而使会话劫持攻击变得非常容易(并且可能)。

        如果您需要 session_id,有一些方法可以降低会话劫持的可能性,考虑在上传后重新生成 session_id,或者进行二次检查以验证用户。

        如果您要防止未经授权的上传,我会考虑一些不同的事情 - 可能会在上传期间生成与用户相关联的一次性唯一字符串,而不是 session_id 本身.太冒险了,IMO。

        【讨论】:

        • session_id 已经以某种方式传递(查询字符串或 cookie)。因此,将其放在源代码中并不会使其“易于访问”
        • 在标头中查找会话要容易得多。
        • 我的观点(我希望在我的编辑之后可能更清楚)是我认为像这样传递 session_id 根本不是一个好主意。也许我错了——如果我愿意,我愿意接受这方面的教育:)
        【解决方案5】:

        没关系。这可能并不理想,但是任何对破解您的会话感兴趣的人都会在您可能已经放置的其他地方(cookie 等)中寻找它,因此您不会降低太多的门槛。 (如果 cookie 不起作用,Java EE 会将此作为后备,将 ;jsessionid=xxx 附加到每个 URL。)

        重要的是要确保很难劫持会话,无论黑客如何获得会话 ID。 (通过将会话绑定到源 IP 地址并在每个请求的服务器级别检查它,使用合理的超时和各种其他技术。)

        【讨论】:

          猜你喜欢
          • 2016-07-12
          • 1970-01-01
          • 2021-08-19
          • 2020-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多