Я использую функцию blenc для шифрования кода PHP.
Среда выглядит следующим образом:
Если я использую зашифрованный скрипт в режиме 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, которую я не могу объяснить, или, возможно, что-то неправильно настроено.
Я прочитал в другом ТАКОМ вопросе вовремя, что у blenc были проблемы. Не имея возможности увидеть ваш код, хотя я не могу это подтвердить. Очевидно, документация PHP показывает неправильный код (и я могу подтвердить, что он все еще не прав, как я только что проверил). Итак, я предполагаю, что вы используете код в PHP-документации, что неправильно. Вместо:
file_put_contents($key_file, $redistributable_key, FILE_APPEND);
Вы должны использовать:
file_put_contents($key_file, $redistributable_key."\n", FILE_APPEND);
Что объяснит, почему ваш скрипт работает в первый раз, а не во второй. В первом примере кода все ключи записываются в одну строку, а не в новую строку, которая портит ключи.
Других решений пока нет …