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


我有一个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解密 - >获取相同的数据。可能?

谢谢,
安键


3926
2018-05-04 05:48


起源

我没有在客户端提到解密,或者我?因为在客户端存在的解密机制就像拥有一个最先进的安全系统,然后在你的家门下放下遥控器:) - anjan
对不起这是我的错。误读那部分。 ^ _ ^ ;; - deceze♦


答案:


这里最好的方法(imho)将是 将会话信息存储在数据库中,然后确保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');

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


13
2018-05-04 08:59



附录:使用memcached作为会话存储可能更好,它比MySQL快得多,并且比大多数选项更容易横向扩展。 - ZoFreX
我很想去寻找这个解决方案,但PHP网站没有使用mysql db进行会话存储,所以我一直在寻找这种方式,所以我不需要改变PHP网站的代码:) - anjan
加密非常难以正确使用,因此我建议选择服务器端解决方案,但如果您真的需要,可以使用Node.js加密模块。我将尝试提供上面的示例。 - mikl
我将使用数据库模型,但是现在,我将首先尝试使用加密方法:) - anjan
@ HiDd3N不知道该解释什么。假设您有一个PostgreSQL数据库后端,并且您的PHP系统正在使用它来保持会话状态,您可以编写一堆Node.js代码来连接数据库并检查会话cookie ID与存储在数据库中的ID。如果您有自定义数据,则可以在会话ID或用户ID上创建一个表,并从两个系统中查询该表。 - mikl


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

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


1
2017-11-07 23:19