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


Sharing data between php and node.js via cookie securely

我有一个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支持,使用相同的加密密钥?

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

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

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

正如你所看到的,这就是为什么我想知道,如果PHP和node.js之间有一个共同的加密/解密系统,那么一个加密的数据可以被另一个解密,反之亦然。

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

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

谢谢,
Anjan

最好的方法是将会话信息存储在数据库中,然后确保Node可以读取PHP应用程序设置的会话cookie。

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

加密示例

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

在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');

请,请小心这个代码。我绝不是一个安全专家,所以如果你想加密任何敏感的东西,你应该得到同行审查的人:)

另一种方法是使用node.js作为PHP会话存储本身。Gonzalo Ayuso对此有一篇有趣的文章:

http://gonzalo123.wordpress.com/2011/07/25/using-node-js-to-store-php-sessions/