Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart
  • записи
    3
  • комментариев
    178
  • просмотр
    1 901

Ioncube loader 12 и баги, которые он уже принес. Веселье впереди! Ионкуб стал злым.


sitecreator

460 просмотров

 Поделиться

После перехода некоторых хостеров на Ioncube loader 12  с 10-й или 11-й версии начали появляться чудеса в виде ошибок, которых никогда не было ранее, А именно:

 

PHP Warning:  [obfuscated](): Null byte in regex in 

 

При том, что код абсолютно валидный. И никаких проблем на 10-й или 11-й версии ioncube loader не возникало на любой версии php от 5.6. до 7.4.

Откуда же взялись нулевые байты в regex?

 

 

  

Программистам может быть интересно.

 

Исходный код:

 

$pattern_for_tags = '';
echo "\nЭто тоже 000 pattern_for_tags\n";
echo $pattern_for_tags;

 

элементарнейший код.

Присвоили переменной пустую строку. И сразу же вывели ее. Ожидали, что будет выведена пустая строка. Т.е. на выходе не будет ничего.

 

а вот, что имеем на выходе с ioncube loader 12-й версии:

 

9dQ53mv.jpeg

 

смотрим в браузере в "исходный код".

php + ионкуб превратили пустую строку в последовательность шестнадцатеричных нулей.

Чудеса? Нет, это баг.

 

Т.е. ионкуб пихает в строки последовательности нулей.

И это даже будет незаметно до поры, до времени. Т.к. браузер даже не чихнет на эти лишние нули, т.к. он их просто не отобразит. И вам будет казаться, что все работает.

Но как только вы такую строку захотите использовать как паттерн для регулярного выражения, то php начинает ругаться на нули, т.к. они, действительно, там появились.  И впихнул их именно ioncube loader 12-й версии по одному ему ведомой прихоти.

И делает он это не закономерно, т.е. в начале кода эта строка будет обработана нормально, например, но в другом месте будут подставлены нули.  Т.е. тут как повезет.

 

Проблема к коду PHP не имеет никакого отношения.

 

Я даже посмотрел исходник на PHP в hex формате. А не затесался ли там нечитаемый символ?

Нет. Там четко есть пустая строка - это только кавычки, и больше ничего.

 

 

OST9msL.jpeg

 

Думаю, что в лоб это можно попробовать вылечить используя энкодер 12-й.

 

 

 

 

 

  

PHP Warning:  [obfuscated](): Null byte in regex in 

 

вот такая ошибка движка PHP появляется при смене ioncube loader на 12-ю версию.

сопровождаться может также 503-й ошибкой сервера и т.д.

на деле нет никаких null byte в regex. Речь про исходный код и про переменные в процессе выполнения. Специально смотрел с отладкой. Чистой воды баг от ионкуба.

 

Если в журнале ошибок опенкарт увидите вышеприведенную ошибку (Null byte in regex), то смотрите версию ионкуба.

через phpinfo(). Ее генерирует именно 12-й ионкуб.

 

blvgT91.jpeg

 

KhgSIOC.jpeg

Версию ioncube loader меняет хостер на общем хостинге. Релиз 12-й ioncube loader стартовал в середине августа 2022-го.

Т.е. пока крайне сырая версия, но некоторые хостеры поспешили уже перейти с 11-й на 12-ю. Хотя обычно дают устаканиться сырому продукту, т.е. дожидаются когда массовые баги отловят в первые несколько месяцев. Месяц-два - это не срок чтобы такого рода продукт перестал быть сырым.

Пользователям VDS автоматический переход на 12-ю не грозит.

 

Не возникает проблем на любой версии PHP от 5.6 до 7.4 включительно с ioncube loader  10-й или 11-й веток.

 

 

Многие хостеры дают возможность выбора версии ioncube loader. Во избежание проблем выбирайте 10-ю или 11-ю версию.

 

По идее компания ioncube старается обеспечить обратную совместимость программ (и энкодеров более ранних версий) со всеми версиями ioncube loader.

Но когда это не получается у компании ioncube , то она предлагает перекодировать программы новым энкодером, т.е. энкодером 12-й версии чтобы не было проблем с ioncube loader 12-й версии.

Так компания ioncube видит работу над устранением багов, порожденных самой же компанией ioncube.

Чтобы устранить баг компания ioncube предлагает купить 12-й энкодер.

 

 

 

 

И все могло бы быть не так страшно, но баг ioncube напоролся на признанный баг самого движка php, который описан здесь:

 

https://bugs.php.net/bug.php?id=77726

 

Т.е. это поведение официально признано багом и известно разработчикам PHP.

 

вот ссылка на фиксы данного бага:

https://github.com/php/php-src/pull/8114

 

 

Но хостеры не спешат ставить обновленную версию PHP, в которой отсутствует данный баг.

 

В принципе этот баг самого PHP и не проявился бы если бы ioncube loader не напихал нам нулевых байтов.

 

вот тест:

 

<?php

preg_match("/a".chr(0)."bc/", 'abc');

 

 

запустите этот код. Если вы увидите сообщение об ошибке:

 

Warning: preg_match(): Null byte in regex in ...\preg00.php on line 3

 

то это значит, что у вас еще версия PHP с багом.  А хостер не заменил ее на версию без бага.

 

Итого, что имеем?

Удивительный случай когда баг ioncube loader встретился с багом движка PHP.

При совершенно валидном изначальном  коде.

 

 

 

 

От аномального поведения невозможно избавиться.

удаляем NULL байты, но вместо удаления либо появляются новые, либо удаляются только конечные и начальные.

Чудеса! Точнее, это баги.

 

Пробовал так бороться:

 

$pattern_for_tags = '';

$pattern_for_tags = str_replace("\0", '', $pattern_for_tags);
echo "\nЭто тоже после удаления NULL-ей pattern_for_tags\n";
echo $pattern_for_tags;

$pattern_for_tags = trim($pattern_for_tags);
echo "\nЭто тоже после TRIM pattern_for_tags\n";
echo $pattern_for_tags;

 

Но, как говорится фиг вам.  php с кубом стоят на своем.

 

ADyNWZD.jpeg

 

видимо, без покупки енкодера 12 удивительный баг не побороть.

Хороший маркетинговый ход у разработчиков ионкуба. Создать баг в новом loader-е, для исправления которого нужно купить новый энкодер 12-й версии за $300.

Видать, с продажами энкодера 12-го совсем плохо.

Да и зачем он нужен то?

Поддержки php 8 в нем нет и не будет. А кому нужна поддержка 8.1, собственно, для которой он и сделан?

 

И, не факт, что применение 12-го энкодера позволит решить проблему. Это как лотерея.

Может быть, что это неустранимый пока баг 12-й версии ioncube loader-а.

 

ioncube репутацию свою подпортили, подложив такую свинью...

Проблемный получился продукт № 12.

 

По-хорошему нужно отказываться от применения ioncube. Тем более, что для 8-й версии PHP его нет и не будет никогда. Но есть для 8.1. Для 8-ки они вообще решили не делать.  Какой-то удивительный подход у разработчиков ioncube.

Изменено пользователем sitecreator

  • +1 1
 Поделиться

3 комментария


Рекомендованные комментарии

Так что, теперь ваш модуль webp можно не сносить и после него пустые переменные другого кода не будут менять свои значения с false на true?

  • +1 1
Ссылка на комментарий

Черговий раз піднімемо питання доцільності використання кодування взагалі і згадаємо порушення GNU по якій розповсюджується все що пов'язано з opencart чи в черговий раз закриємо очі і продовжимо використовувати баговане, що створює геморой всім від розробника до користувача?

  • +1 4
Ссылка на комментарий

 

На фоне пока неустраненного бага в ioncube loader 12.0.2     ( релиз от 2022-09-09)

компания ioncube решила поднять цены на энкодеры.

Pro версия вместо $299 стоит теперь $344.

 

На фоне обнаруженного бага неплохой коммерческий ход? Можно пока не спешить с устранением бага в ioncube loader 12, но при этом намекнуть, что баг можно обойти за счет покупки нового энкодера.  Вроде как у разработчиков и выхода другого нет, так почему бы заодно и цену не поднять?

 

Непонятно как некоторые хостеры ухитрились поставить настолько сырой и непроверенный софт?

Куда и зачем они так торопились, что поставили софт, которому меньше месяца с момента самого первого релиза 12-й?

Подождать несколько месяцев до стабильной (исправленной от багов) и проверенной версии никак нельзя было?

Ведь понятно, что в первые месяцы после релиза нового продукта идет отлов тех самых багов.

 

Матерые хостеры, например, никогда не торопятся. Для них важна стабильность и репутация.

 

Я бы еще понял установку ioncube loader 12 для php 8.1, там хотя бы смысл есть. Но для предыдущих версия php нет смысла.

 

C469a8u.jpeg

Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.