Laravel с ионным кубом и кодировкой

Я работаю над фреймворком Laravel в течение короткого времени, после завершения веб-сайта, я хочу кодировать его с помощью Ioncube — но я сталкиваюсь с проблемой, когда Ioncube не может преобразовать код движка шаблона лезвия в код PHP перед кодированием и выводить код в виде HTML нормальный текст.

3

Решение

Файлы шаблонов лезвий Laravel не являются настоящим PHP-кодом, поэтому кодер ionCube не может их правильно кодировать; тем не менее, Encoder также предлагает шифрование файлов, которое может помочь в вашем случае, но для этого требуется некоторая настройка:

  1. В Laravel измените модуль, который читает файлы шаблона Blade, заменив file_get_contents(<blade template files>) с ioncube_read_file(<blade template_files>),

    В моей установке Laravel 4 кажется, что файл, отвечающий за загрузку и компиляцию шаблонов Blade, находится в vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.phpстрока 62: $contents = $this->compileString($this->files->get($path));,

    Вот, $this->files->get($path) это просто file_get_contents($path) с некоторой обработкой ошибок — вы можете найти эту функцию в bootstrap/compiled.php, Тем не менее, вы должны иметь возможность заменить строку в BladeCompiler.php с:

    $contents = $this->compileString(ioncube_read_file($path));
    

    или (если вы использовали фразу-пароль):

    $passphrase = "<my passphrase>";
    $contents = $this->compileString(ioncube_read_file($path, $is_encrypted, $passphrase));
    

    Обратите внимание, что вы можете убедиться, что фраза-пароль защищена в файле. Вы можете найти больше информации об этих функциях в Гид пользователя на странице 54.

  2. Получить ioncube_read_file работая, вам нужно будет кодировать модифицированный модуль. Кроме того, закодируйте остальную часть вашего приложения, за исключением файлов шаблонов Blade.

  3. Зашифруйте (не закодируйте!) Файлы шаблона Blade, обычно заканчивающиеся на .blade.phpи — если вы используете фразу-пароль — убедитесь, что она совпадает с той, которая использовалась для ioncube_read_file,

Также имейте в виду, что это сгенерирует стандартные файлы PHP из ваших зашифрованных, так как файл компилируется и записывается обратно в кэш в виде простого текста. Если вы хотите изменить это, возможно, стоит заглянуть в Гид пользователя, п. 54 и переопределить / расширить соответствующие методы bootstrap/compiled.php такие как get а также put определить, зашифрован ли файл, и при необходимости записать зашифрованный файл.

Я также должен упомянуть, поскольку этот вопрос регулярно задают на сайте службы технической поддержки ionCube: несмотря на все кодирование и шифрование, код HTML и JavaScript будут быть отображены в сыром виде для всех клиентов, чтобы увидеть. Я упоминаю об этом только потому, что требуется много усилий для защиты ваших файлов шаблонов, которые в большинстве случаев состоят в основном из кода HTML. Это действительно делает любую модификацию действительно сложной (например, удаление логотипа), но такие вещи может также может быть достигнуто с помощью некоторых пользовательских CSS.

4

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

Столкнувшись с этой проблемой, я считаю, что этот ответ будет простым и легким способом ее решения. С помощью этого метода вам не придется редактировать каркасные файлы каждый раз после обновления.

  1. Создайте своего нового поставщика услуг, чтобы заменить ViewServiceProvider. Назови это IonCubeCompilerServiceProvider
  2. Создайте новый класс для расширения BladeCompiler. Назови это IonCubeBladeCompileр
  3. Наконец, поменяйте местами Осветить \ View \ ViewServiceProvider :: класс из массива провайдеров config / app.php и замените его собственным ViewServiceProvider.

    namespace App\Providers;
    
    use App\Libraries\IonCubeBladeCompiler;
    use Illuminate\View\Engines\CompilerEngine;
    use Illuminate\View\ViewServiceProvider;
    
    class IonCubeCompilerServiceProvider extends ViewServiceProvider
    {
    public function registerBladeEngine($resolver)
    {
    $this->app->singleton('blade.compiler', function () {
    return new IonCubeBladeCompiler(
    $this->app['files'], $this->app['config']['view.compiled']
    );
    });
    
    $resolver->register('blade', function () {
    return new CompilerEngine($this->app['blade.compiler']);
    });
    }
    }
    

Второй файл

    namespace App\Libraries;use Illuminate\View\Compilers\BladeCompiler;

class IonCubeBladeCompiler extends BladeCompiler
{
public function compile($path = null)
{
if ($path) {
$this->setPath($path);
}

if (! is_null($this->cachePath)) {
if(function_exists('ioncube_read_file')){
//This is what I'm adding.
$contents = $this->compileString(ioncube_read_file($this->getPath()));
}else{
//This is the original line.
$contents = $this->compileString($this->files->get($this->getPath()));
}

$this->files->put($this->getCompiledPath($this->getPath()), $contents);
}
}

}

Для более подробной информации вы можете проверить следующие две ссылки
https://laracasts.com/discuss/channels/laravel/extend-the-compile-function-on-bladecompilerphp
а также
http://blog.ioncube.com/2016/12/19/ioncube-encoding-laravel-project-controllers-models-templates/

1

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