Безопасный обмен данными между php и node.js через cookie - PullRequest
11 голосов
/ 04 мая 2011

У меня есть сайт PHP, и для обновлений в реальном времени и чата я установил Node.js и он работает нормально.

И PHP, и Node.js имеют доступ к одной и той же базе данных MySQL.

Но проблема в том, чтобы проверить личность пользователя, который уже вошел на сайт PHP.

Я не хочу разговаривать с приложением PHP любым способом, REST или нет. Так как для меня это будет противоречить той же цели использования Node.js, что и при каждом запросе Node.js будет выполняться новый запрос страницы PHP.

Мне нужен метод шифрования и дешифрования, который понимают как PHP, так и node.js

Чтобы я мог установить cookie-файл с зашифрованным значением для запроса Node.js, который будет находиться на поддомене updates.mydomain.com. Читая файл cookie, Node.js может расшифровать его значение и проверить личность пользователя.

Итак, мой вопрос: существует ли какой-либо метод шифрования и соответствующий метод дешифрования, который поддерживается через PHP и Node.js с использованием одного и того же ключа шифрования?

Обновление

На самом деле я не с нетерпением жду расшифровки на стороне клиента: D, так как тогда весь смысл расшифровки не имеет смысла. То, что я хочу сделать, это -

1) PHP для создания зашифрованной куки-информации о пользователе и использования этого куки-файла для определенного домена, такого как updates.mydomain.com

2) Затем node.js будет получать cookie для каждого последующего запроса и расшифровывать данные на стороне сервера, используя тот же ключ шифрования.

Как вы можете видеть, именно поэтому я хотел знать, существует ли общая система шифрования / дешифрования между PHP и node.js, чтобы зашифрованные данные одним могли быть расшифрованы другим, и наоборот.

Таким образом, я могу безопасно передавать текущую идентификацию зарегистрированных пользователей из PHP в node.js, и мне не нужно беспокоиться об управлении сессиями других видов:)

Короче говоря, Encrypt by PHP -> Decrypt by Node.js -> вернуть те же данные. Возможно ли это?

Спасибо
Anjan

Ответы [ 2 ]

13 голосов
/ 04 мая 2011

Наилучшим подходом здесь (imho) было бы сохранить информацию о сеансе в базе данных , а затем убедиться, что Node может прочитать куки-файл сеанса, установленный приложением PHP.

Затем он может просто проверить файл cookie сеанса в базе данных, чтобы убедиться, что пользователь вошел в систему.

Пример шифрования

Если вы действительно действительно хотите использовать шифрование, имейте в виду, что это, вероятно, будет менее безопасно и займет больше времени, чем простое изменение серверной части PHPs, но вот пример, который, вероятно, может сработать:

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

И, пожалуйста, будьте осторожны с этим кодом. Я ни в коем случае не эксперт по безопасности, поэтому, если вы хотите зашифровать что-нибудь деликатное, вы должны получить экспертную оценку от того, кто:)

1 голос
/ 08 ноября 2011

Другой подход заключается в использовании node.js как хранилища сессий PHP. У Гонсало Аюсо есть интересная статья:

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

...