php - 通过 cookie 在 php 和 node.js 之间安全地共享数据

标签 php cookies encryption node.js single-sign-on

我有一个 PHP 站点,为了实时更新和聊天,我已经安装了 Node.js,它运行良好。

PHP 和 Node.js 都可以访问同一个 MySQL 数据库。

但问题是要验证已经登录到 PHP 站点的用户的身份。

我不想通过任何方式与 PHP 应用程序交谈,无论是否使用 REST。因为,对我来说,这将破坏使用 Node.js 的相同目的,因为每个 Node.js 请求都会发出一个新的 PHP 页面请求。

我要的是一个PHP和node.js都懂的加解密方法

这样我就可以为 Node.js 请求设置一个带有加密值的 cookie,它将位于 updates.mydomain.com 子域。通过读取 cookie,Node.js 可以解密它的值并验证用户的身份。

那么,我的问题是:是否有任何通过 PHP 和 Node.js 都支持的加密和相应的解密方法,使用相同的加密 key ?

更新

实际上,我并不期待在客户端解密它:D,因为这样整个解密点就毫无意义了。我想做的是——

1) PHP 生成一个 cookie 加密的用户信息并将该 cookie 用于特定域,例如 updates.mydomain.com

2) 然后node.js会为每个后续请求获取cookie,并在服务器端使用相同的加密 key 解密数据。

如您所见,这就是为什么我想知道,PHP 和 node.js 之间是否有一个通用的加密/解密系统,以便一个加密的数据可以被另一个解密,反之亦然。

这样我可以安全地将当前登录的用户身份从 PHP 转移到 node.js,我不必担心其他类型的 session 管理 :)

简而言之,通过 PHP 加密 -> 通过 Node.js 解密 -> 获取相同的数据。可能吗?

谢谢,
安詹

最佳答案

这里最好的方法(恕我直言)是store the session information in the database ,然后确保 Node 可以读取 PHP 应用设置的 session cookie。

然后它可以根据数据库检查 session cookie 以确保用户已登录。

加密示例

如果您真的真的想要使用加密,请注意,与简单地更改 PHP session 后端相比,这可能不太安全并且需要更多时间,但这里有一个可能可行的示例:

在 PHP 中,加密数据:

<?php
$encryption_key = 'somethingverysecretandpreferrablylong';
$vector = 'anotherlongwindedstring';
mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $encryption_key, 'My secret message', MCRYPT_MODE_CBC, $vector);
?>

并在 Node.js 中解密;

var crypto = require('crypto');
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8');
decipher.update(crypted_string_from_cookie,'hex','utf8');
decipher.final('utf8');

请注意这段代码。我绝不是安全专家,所以如果你想加密任何敏感的东西,你应该得到同行评审:)

关于php - 通过 cookie 在 php 和 node.js 之间安全地共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5879132/

相关文章:

c# - 使用 C# 进行 TEA 加密

javascript - Google API 多作用域

javascript - 上传文件完成后如何禁用php中选择文件上传的按钮?

php - 无法解析类型为[date]的字段[datefield]

php - session 保存在哪里?

performance - pki 与对称加密的性能差异是什么?

php - SQL : How to reduce multiple time querying the same table ..查询优化

c# - authCookie 在 global.asax 中不安全

javascript - 如何在 JSON cookie 中设置变量?

perl - 从 Perl 中的字符串执行整个 Perl 程序