当前位置: 首页 > 面试题库 >

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

柳高卓
2023-03-14
问题内容

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

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

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

我不想通过任何方式(无论是否使用REST)与PHP应用程序对话。因为对我来说,这将与使用Node.js的目的相违背,因为随后每个Node.js请求都将产生一个新的PHP页面请求。

我想要的是一种PHP和node.js都可以理解的加密和解密方法

这样我就可以为Node.js请求设置具有加密值的cookie,该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


问题答案:

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

然后,它可以仅针对数据库检查会话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');

并且,请谨慎使用此代码。我绝不是安全专家,因此,如果您想加密任何敏感内容,都应该得到:)的同行评审。



 类似资料:
  • 我有两个问题。我理解,如果我在cookie中指定域为(带前导点),那么所有子域都可以共享一个cookie。 是否可以访问在中创建的cookie(没有子域)? 如果在中创建,(没有子域)是否可以访问cookie?

  • 我是AWS的新手,需要大师的帮助! 我需要了解为您的VPC和EC2实例创建独立安全组的目的。我读过AWS建议成立独立小组,但我不理解其背后的信念。 将让独立的安全组在VPC层过滤我的传入流量,并拒绝尚未定义规则的请求。 假设我有两个安全组, 安全组-EC2-允许SSH和ICMP流量的入站规则 安全组-VPC-未配置入站规则。 即使我的VPC没有定义安全组,我还能连接到EC2实例吗? 提前谢谢你!

  • 问题内容: 是否有使用节点,表达和redis / predis共享PHPSESSID的最新指南(或示例代码)? 我发现有1-2年的一些教程,它们都使用旧版本的Express或不使用Express。 Express cookie解析器也已弃用。 https://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share- redi/

  • 我正在做一个phonegap应用程序,我不能在index.html和inappbrowser窗口之间共享数据。我尝试了这段代码,但它对我不起作用。 我还尝试使用localStorage,但只将inappbrowser的数据共享到index.js,而不是将index.js的数据共享到inappbrowser。

  • 问题内容: 我有一些cookie存储在http://sub1.myserver.com中 ,我希望能够在http://myserver.com中看到它们。 问题答案: 我能够使用以下代码来做到这一点:

  • 我在堆栈中发现了类似的问题,但我不确定它们是否适用于PHP。 我想用pcntl_fork()创建子进程。我想将来自父进程和子进程的消息写入日志文件。 如果我在父级中打开一个文件句柄,从子级写入同一个句柄是否安全?请注意,我将只附加到文件中。 我担心可能发生的争用情况,特别是如果两个进程在不同的内核上执行:如果两个进程在两个不同的内核上同时写入同一个文件句柄,会发生什么情况?