Size: a a a

2020 May 03

EK

Evgeniy Kuvshinov in Laravel Pro
а если классы не регистрируются по списку а грузят их все
то мы можем получить выполнение кода из любой папки
источник

EK

Evgeniy Kuvshinov in Laravel Pro
эх так и не получил ответы
1. что привносят такова тэги ради чего из юзать.
2. как можно загрузить классы чтобы работал class_implements без выполнения файла ?
3. загрузка через рефлексию без знания имен классов тоже такое себе
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
эх так и не получил ответы
1. что привносят такова тэги ради чего из юзать.
2. как можно загрузить классы чтобы работал class_implements без выполнения файла ?
3. загрузка через рефлексию без знания имен классов тоже такое себе
1. Автоматический резолвинг. Не надо постоянно добавлять в контейнер класс (в случае с симфони), чтобы его затегать
2. В коде, который я тебе кинул, class_implements вызывается только у тех файлов, что реализуют psr-4, а не у всех подряд
3. Это не единственно верный способ, но вооружившись парсером или token_get_all, все возможно
источник

EK

Evgeniy Kuvshinov in Laravel Pro
Vadim
1. Автоматический резолвинг. Не надо постоянно добавлять в контейнер класс (в случае с симфони), чтобы его затегать
2. В коде, который я тебе кинул, class_implements вызывается только у тех файлов, что реализуют psr-4, а не у всех подряд
3. Это не единственно верный способ, но вооружившись парсером или token_get_all, все возможно
1. автоматический резолвин
для того чтобы определить какие классы имлементят интерфейс
нужен список классов и проверять каждый на то что он имплементит через class_implements или reflection
откуда берется этот список классов (либо из конфигурации, либо грузит все подряд)
источник

EK

Evgeniy Kuvshinov in Laravel Pro
оба случая приводят нас либо к существованию конфигурации которая может быть заменена примером кода или выполнением файлов в папке с проектом.
источник

EK

Evgeniy Kuvshinov in Laravel Pro
что на нет убирает все плюсы "автоматической" штуки
источник

EK

Evgeniy Kuvshinov in Laravel Pro
2. тот пример с загрузкой psr4 он вызывается из конфигов yaml, xml
в которых надо дублировать автозагрузчик
источник

EK

Evgeniy Kuvshinov in Laravel Pro
3. про парсер который поверх token_get_all я писал выше и говорил что этот способ мало вероятен
и не используется в проекте
и просил другие способы
источник

EK

Evgeniy Kuvshinov in Laravel Pro
Evgeniy Kuvshinov
а как по твоему это сделать другими путями?
вот
источник

EK

Evgeniy Kuvshinov in Laravel Pro
поэтому наутверждать можно многое
но вот подтвердить свои слова ничем лучше чем рефлексия которая разбивается о проблему что надо объявить классы не получилось
источник

EK

Evgeniy Kuvshinov in Laravel Pro
я просто прекрасно знаю эту проблему с получением всех классов и поиска классов имплементящих вещи
источник

EK

Evgeniy Kuvshinov in Laravel Pro
в пхп
источник

EK

Evgeniy Kuvshinov in Laravel Pro
и di у symfony один из худших (по моему личному мнению)
самый норм исходник у php-di (по моему мнению) потом ларка, ну и потом что нибудь примитивное типо pimple
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
поэтому наутверждать можно многое
но вот подтвердить свои слова ничем лучше чем рефлексия которая разбивается о проблему что надо объявить классы не получилось
А интерфейсы могут быть у функций? Трейтов? Разумеется, класс должен быть объявлен, в чем тут проблема? Надумал себе всяких ситуаций с эксплойтами, которые, как я тебе уже показал, невозможны, и продолжаешь утверждать, что преимуществ у тегов нет. ну ок, юзай свой супер мощный di.
источник

EK

Evgeniy Kuvshinov in Laravel Pro
Vadim
А интерфейсы могут быть у функций? Трейтов? Разумеется, класс должен быть объявлен, в чем тут проблема? Надумал себе всяких ситуаций с эксплойтами, которые, как я тебе уже показал, невозможны, и продолжаешь утверждать, что преимуществ у тегов нет. ну ок, юзай свой супер мощный di.
но выше указывал обратное
что не надо выполнять код
но как я объяснил и разжевал что объявление = выполнению
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
но выше указывал обратное
что не надо выполнять код
но как я объяснил и разжевал что объявление = выполнению
Объявлен != выполнен
источник

EK

Evgeniy Kuvshinov in Laravel Pro
Vadim
Объявлен != выполнен
объяви без выполнения файла
источник

EK

Evgeniy Kuvshinov in Laravel Pro
в пхп это к сожалению одно и тоже
источник

V

Vadim in Laravel Pro
Evgeniy Kuvshinov
объяви без выполнения файла
interface UserInterface
{}

class User implements UserInterface
{
   public function __construct()
   {
       file_put_contents(__DIR__ . '/exploit.txt', 'bug');
   }
}

var_dump(class_implements(User::class));
источник

EK

Evgeniy Kuvshinov in Laravel Pro
у тебя код выполняется
источник