session - 在 session 中存储数据有哪些风险?

标签 session drupal

我听说过跨站点脚本,人们可以通过不正当的方式访问 cookie。所以我希望有人能够回答这些问题。我想举一个以最纯粹的方式在 session 中存储某些内容的例子,但使用像 Drupal 这样的 CMS。假设我们有这个:

$data = $fancyWebService->getSuperSecureDataThatOnlyTheCurrentlyLoggedInUserCanSee();
$_SESSION['basic_variable'] = $data;
  1. 如果用户现在从 mysite.com 前往 devious-site.com,是否有什么方法可以让人们仅通过知道该变量的名称就可以从“basic_variable”获取数据?
  2. 有什么方法可以让当前用户看到 $_SERVER 变量的打印结果并实际看到其中存储的所有内容吗?
  3. 我在某处读到, session 或 cookie 中的数据应该“加密”。在上面的示例中,我相当确定数据存储在 session 中,并且该 session 是安全的。是这样吗,还是只有启用 HTTPS 才安全?
  4. Drupal 在 Cookie 中存储一些信息,如果您选择使用 Cookie 来替代“ session ”,这会对上述内容产生什么影响?

更新

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

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

(或者只是 vardump session 变量)...

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

最佳答案

用户 grom 在这里给出了一个很好的答案,其中提到了帮助保护 PHP session 安全的方法: https://stackoverflow.com/a/7488/3874219

首先我想说 PHP,尤其是 5.x.x 版本,在安全性方面已经取得了长足的进步;但是, session 数据仍然可能发生许多潜在的情况,因为它不断在服务器和客户端之间传递。让我们分别解决您的 4 点:

'Should the user now travel from mysite.com, to devious-site.com, is there any way that someone can get the data from "basic_variable", just by knowing that the variable is called that?'

本质上来说,不是。您的变量和变量名称存储在您的服务器上,并且由于代码在发送到客户端之前会被处理为 HTML View ,因此您的 PHP 代码永远不会到达客户端。如果其他人无法访问您的服务器或以某种方式损害服务器的安全,则存储在变量中的数据在您的服务器上安全,否则不会传递给客户端。如果给定变量中的数据存储在通过线路/网络传输到客户端的 session 或 cookie 中,则它有可能被拦截。默认情况下,此流量未加密,除非您通过 SSL 证书或类似的加密方案实现了 OpenSSH。

'Is there any way that the current user can see a print out of the $_SERVER variable and actually see all the contents stored in it?'

如果您“回显”它,或者以其他方式对 PHP 进行编程以公开其中存储的数据。同样,如果变量被放置在发送到客户端的某个地方,并且在发送 HTTP 响应之前没有处理成 HTML 或以其他方式处理,那么它就会面临风险。

'I read somewhere that data in the session or in cookies should be "encrypted". In the above example, I'm fairly sure the data is being stored in the session, and that this session is secure. Is this the case, or is it only secure if HTTPS is enabled?'

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

'Drupal stores some info in cookies, if you choose to use cookies as apposed to "session", how does that affect the above?'

Cookie 存储在用户的计算机上。 Cookie 中的数据可以由服务器加密或散列,以便安全地存储在客户端,但一切皆有可能。如果潜在的黑客伪造您的域,他们就可以访问 cookie 及其中的所有内容。如果 cookie 链接到事件 session ,则他们只是欺骗了自己的身份并通过受害者的 session 获得了对您网站的访问权限。噗。身份盗窃、恶意编辑用户内容等。Drupal 肯定已经存在了足够长的时间,已经有适当的机制来帮助防止这种情况;但是,我不是 Drupal 专家。

希望这能带来一些启发。最佳实践 IMO,不要在 session 中存储敏感数据!如果您在 cookie 中存储识别信息,请确保您有某种类型的实现来防止跨站点伪造,例如在 ASP.NET MVC 中,我使用框架中提供的防伪 token 。您需要一种方法来确保通过 cookie 声称自己身份的人有另一种方法来验证来自您的站点/域的所述 cookie 的请求,而不是其他方法。

关于session - 在 session 中存储数据有哪些风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27895069/

相关文章:

http - panic - 没有收到数据 - ERR_EMPTY_RESPONSE

javascript - 使用 Express.js 后端 API 处理 React 中的 session

php - 如何检查 MYSQL 查询中定义的偏移量

Java HttpSession 可以在运行时更改吗?

php - 作为 View 结果的 drupal 7 内容类型字段

http - 使 Domino HTTP session 无效/删除?

drupal - 是否有合适的 Drupal 7 form api managed_file 教程?

mysql - 测试MySql语句中的字段长度

drupal - 从内容创建页面中删除多余的东西 (Drupal 6.x)

php - php/drupal 网站中的 SSL