fastcgi — blenc_encrypt — сбой процесса php-cgi

Я использую функцию blenc для шифрования кода PHP.

Среда выглядит следующим образом:

  • Lighttpd в качестве веб-сервера с включенным модулем fastcgi
  • Ключ хранится в / usr / local / etc / blenckeys
  • Зашифрованный скрипт PHP, который можно использовать в режиме cli или web.
  • Php.ini точно такой же между CGI и CLI

Если я использую зашифрованный скрипт в режиме cli, проблем не возникало.

Если я использую тот же зашифрованный скрипт через lighttpd (cgi), я получаю 500 Внутренняя ошибка —

первый звонок Http: //x.x.x.x/myscript.php работает, но следующее будет с этой ошибкой :

2016-03-09 08:48:45: (mod_fastcgi.c.2562) неожиданный конец файла
(возможно процесс fastcgi умер): pid: 1886 socket:
UNIX: /tmp/php.socket-0
2016-03-09 08:48:45: (mod_fastcgi.c.3346) ответ не получен, запрос отправлен: 1078 для сокета: unix: /tmp/php.socket-0 для
/myscript.php, закрытие соединения

РЕДАКТИРОВАТЬ

Спасибо моему коллеге, я нашел проблему и знаю, как это исправить.

Проблема возникает из-за Zend OPcache, который не совместим с расширением blenc.

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=0

РЕДАКТИРОВАТЬ

Конечно, я могу поделиться частью кода:

В упаковке (место, где я шифрую код), я храню ключ распространения в файле ‘ekey’:

Поскольку я использую один и тот же ключ для всех зашифрованных файлов, ключ распространения одинаков для всех файлов:

$encryptionKey = md5("myApp".rand (1, 65534).time());
if ($obfuscate) {
$redistributionKey = blenc_encrypt("someText", "/tmp/ekey", $encryptionKey);
file_put_contents(__DIR__."/ekey", $redistributionKey);
}

Следующим шагом является шифрование файлов с использованием того же $encryptionKey — Теги PHP удаляются:

$oFileNoTags = preg_replace(array('/^<(\?|\%)\=?(php)?/', '/(\%|\?)>$/'), array('',''), $oFile);
if (function_exists("blenc_encrypt")) {
$redistributionKey = blenc_encrypt($oFileNoTags, $destFolder.basename($file), $encryptionKey);
} else {
$this->errror(570, "blenc_encrypt function not available. Please install first using PECL");
}

Наконец, при установке нового пакета на клиентах файл ‘ekey’ читается и затирать существующий ключ:

$newKeyEncryptionValue = file_get_contents(__DIR__."/ekey");
if (strpos($keyFileContent, $newKeyEncryptionValue) === false) {
// file_put_contents($keyFile, $newKeyEncryptionValue."\n", FILE_APPEND);
$this->system("echo '".$newKeyEncryptionValue."' | sudo tee ".$keyFile);
}

Я предполагаю, что есть ошибка с blenc и fast-cgi, которую я не могу объяснить, или, возможно, что-то неправильно настроено.

0

Решение

Я прочитал в другом ТАКОМ вопросе вовремя, что у blenc были проблемы. Не имея возможности увидеть ваш код, хотя я не могу это подтвердить. Очевидно, документация PHP показывает неправильный код (и я могу подтвердить, что он все еще не прав, как я только что проверил). Итак, я предполагаю, что вы используете код в PHP-документации, что неправильно. Вместо:

file_put_contents($key_file, $redistributable_key, FILE_APPEND);

Вы должны использовать:

file_put_contents($key_file, $redistributable_key."\n", FILE_APPEND);

Что объяснит, почему ваш скрипт работает в первый раз, а не во второй. В первом примере кода все ключи записываются в одну строку, а не в новую строку, которая портит ключи.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]