Доступ к php $ _SESSION из python (wsgi) – возможно ли это?

У меня есть приложение python / WSGI, которое нужно проверить, чтобы узнать, вошел ли пользователь в веб-приложение PHP. Проблема в том, что приложение PHP проверяет, вошел ли пользователь в систему, сравнивая значение в переменной $ _SESSION со значением в cookie из браузера пользователя. Я бы предпочел не изменять поведение приложения php, если это вообще возможно.

Мои вопросы:

  1. Есть ли в любом случае я могу получить доступ к переменным сеанса изнутри python? С чего начать?

  2. Есть ли очевидные проблемы безопасности / производительности, о которых я должен знать при принятии такого подхода?

  1. Ага. session (по умолчанию) является обычным файлом. поэтому все, что вам нужно, – это просмотреть каталог сеанса и найти файл с именем значения cookie сеанса. затем – вы должны реализовать php-подобный serialize / unserialize и делать все, что хотите.

  2. Неа

Зависит от приложения PHP, если он хранит данные сеанса в базе данных (возможно, MySQL), вы можете просто подключиться к базе данных и получить данные, если они используют собственные сеансы PHP, вы должны посмотреть настройку конфигурации session.save_path в php.ini , это место, где среда выполнения сохраняет файлы с данными сеанса.

После того, как у вас есть данные, вы можете проанализировать его, чтобы получить его неэтериализованным, взгляните на то, как serialize() и unserialize() работают в PHP.

В настоящее время я пытаюсь запустить сервер python бок о бок с существующим Apache / php. Специальное решение, к которому я пришел, состояло в том, чтобы сохранить $ _SESSION в виде зашифрованного файла cookie, позволяя аутентификации php работать по-прежнему, а затем совместно использовать закрытый ключ между двумя серверами.

Два вопроса:

  • До вас, как обрабатывать события истечения срока действия сеанса.
  • Я не потрудился с Инициализационным вектором, считая, что метка времени из моего истечения достаточно. См. https://stackoverflow.com/a/12486940/4495503, почему я могу быть слишком слабым …

Во всяком случае, моя php зашифрованная функция cookie:

 session_start(); $encryptToCookie = function($varToEncode,$cookieName,$privateKey){ $iv = $privateKey; $pass = $privateKey; $method = 'aes-128-cbc'; $encryptedString = openssl_encrypt(json_encode($varToEncode), $method, $pass, true, $iv); setcookie($cookieName,bin2hex($encryptedString)); }; $encryptToCookie($_SESSION,"sessionEncrypted","yohoyohoyohoyoho"); // private key must be 16bit 

И мое дешифрование на стороне python:

 from subprocess import Popen, PIPE import binascii def decrypt(encryptedString,privateKey): encryptedString = binascii.unhexlify(encryptedString) pathToOpenSSL = 'C:\pysrc\openssl\openssl.exe' # MODIFY THIS!! openssl = Popen([pathToOpenSSL, 'enc','-aes-128-cbc','-d', '-nosalt','-nopad','-K', privateKey.encode('hex'), '-iv', privateKey.encode('hex')], stdin=PIPE,stdout=PIPE) decryptedString = openssl.communicate(encryptedString)[0].replace('\x04','') return decryptedString decrypt(encryptedString,'yohoyohoyohoyoho') 

Надеюсь, это поможет кому-то, вспомните все обычные вещи о создании секретных ключей, а затем, будьте осторожны с ними!