在会话中存储数据有哪些风险?

时间:2015-01-12 03:52:49

标签: session drupal

我听说过跨网站脚本,人们可以访问Cookie和狡猾的方式。所以我希望有人可以回答几个问题。我想以最纯粹的方式存储会话中的内容,但使用像Drupal这样的CMS。我们说我们有这个:

$data = $fancyWebService->getSuperSecureDataThatOnlyTheCurrentlyLoggedInUserCanSee();
$_SESSION['basic_variable'] = $data;
  1. 如果用户现在从mysite.com旅行到devious-site.com,是否有人可以从" basic_variable"中获取数据,只要知道该变量被称为?
  2. 当前用户有没有办法看到$ _SERVER变量打印出来并实际看到存储在其中的所有内容?
  3. 我在某处读到会话或Cookie中的数据应该加密"。在上面的示例中,我非常确定数据存储在会话中,并且此会话是安全的。是这种情况,还是仅在启用HTTPS时才安全?
  4. Drupal会在Cookie中存储一些信息,如果您选择使用Cookie作为"会话",这对上述内容有何影响?
  5. 更新

    关于问题2.我的意思是,如果我在php文件中输入以下内容:

    print '<pre>';
    print_r($_SESSION);
    die();
    

    (或只是vardump会话变量)...

    我最终得到了我存储在那里的所有信息,未加密。我的问题是,用户是否可以通过某种方式找到一种方法来访问会话变量(除了通过我公开它),这会使得保留未加密的值是一个坏主意?

4 个答案:

答案 0 :(得分:6)

用户grom在这里提供了一个很好的答案,提到了在PHP中保护会话的方法: https://stackoverflow.com/a/7488/3874219

我想首先说PHP,尤其是5.x.x版本,在安全方面已经取得了很大进展;但是,会话数据可能会发生很多潜在的事情,因为它会在服务器和客户端之间不断传递。让我们分别处理你的4分:

  

&#39;用户现在应该从mysite.com旅行到devious-site.com,是吗?   有人可以从&#34; basic_variable&#34;中获取数据,   只要知道变量被称为?&#39;

天生就没有。您的变量和变量名称存储在您的服务器上,并且由于代码在发送到客户端之前被处理为HTML视图,因此您的PHP代码永远不会到达客户端。存储在未传递给客户端的变量中的数据在您的服务器上是 safe ,授予某人无法访问您的服务器或以某种方式危及您服务器的安全性。如果给定变量中的数据存储在通过有线/网络传输到客户端的会话或cookie中,则可能会被截获。默认情况下,此流量未加密,除非您已通过SSL证书或类似加密方案实施OpenSSH。

  

&#39;当前用户是否有任何方式可以看到打印出来的   $ _SERVER变量并实际看到存储在其中的所有内容?&#39;

如果你回应&#39;它,或以其他方式编程您的PHP以暴露其中存储的数据。同样,如果变量被放置在发送到客户端的某个地方,而不是在发送HTTP响应之前处理成HTML或以其他方式处理,那么它就有风险。

  

&#39;我在某处读到了会话或cookie中的数据   &#34;加密&#34 ;.在上面的例子中,我非常确定数据正在存在   存储在会话中,并且此会话是安全的。这是   如果启用了HTTPS,它是否只是安全的?&#39;

是的,必须启用HTTPS,并且您必须拥有SSL证书才能加密数据,否则未加密的HTTP请求/响应中的所有内容都会受到嗅探,跨站点脚本攻击,域伪造,重定向攻击以及列表继续。 SSL肯定有助于防止这种情况发生。

  

&#39;如果您选择使用Cookie,Drupal会在Cookie中存储一些信息   与&#34;会话&#34;相关,这对上述情况有何影响?&#39;

Cookie存储在用户的计算机上。 cookie中的数据可以由您的服务器加密或散列,以便安全地存储在客户端,但一切皆有可能。如果潜在的黑客伪造您的域名,他们就可以访问Cookie及其中的所有内容。如果cookie链接到活动会话,他们只是欺骗了他们的身份,并通过受害者的会话访问了您的网站。噗。身份盗窃,恶意编辑用户内容等等.Dupupal一直存在足够长的时间,可以建立机制来帮助防止这种情况发生;但是,我不是Drupal专家。

希望这会有所启发。最佳实践IMO,不要在会话中存储敏感数据!如果您要在Cookie中存储识别信息,请确保您具有某种类型的实施方案以防止跨网站伪造,例如在ASP.NET MVC中,我使用了框架中提供的Anti-Forgery令牌。您想要一种方法来确保声称自己是通过cookie的人有另一种方式来验证请求,其中所述cookie源自您的网站/域名,而不是另一个。

答案 1 :(得分:3)

会话ID存储在客户端cookie中,没有其他域可以访问其他域的cookie,并且相同的两个服务器(两个网站)无法看到彼此的会话(直到您将其存储在共享服务器中)

1:使用一般方法是不可能的,但有一种方法 - 要使您的会话在各种网站上可用,您必须在常见服务器上存储会话,并且必须按GET / POST变量传输会话ID。 编写自己的session_save_handler并将会话存储在数据库中。可以从多个Web服务器访问数据库,您就完成了。

2:问题不明确。

3:是的https可以保护您免受会话劫持。

4:问题有点不清楚,请按照此网址获取差异/会话与&之间的相关性饼干

http://viveksoni.net/how-session-works-what-is-session/

答案 2 :(得分:1)

Cookie只能通过Cookie来自的存储域访问。劫持取决于网络。

答案 3 :(得分:0)

是的,您可以在会话中存储数据。但是,您必须尽量减少易受攻击性 数据并仅存储最少的信息,以便您可以识别用户,例如, 通过ID号,最终它将起作用。总体而言,使用会话数据不是 推荐。

相关问题