Александр Воробьев

Александр Воробьев
Рейтинг
64
Регистрация
03.02.2020
estic #:
Вы, правда, без "автовайринга" (рефлексии) уже ничего не пишете?

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

В случае фреймворка - тут как раз "подзадача" самому покрутить рефлексию.  Набраться с ней опыта и "попримерять" ее на свои задачи :)

Юлия #:
А кто-нибудь смотрит сериал "Тайны следствия"? У него тьма сезонов. Есть свои фанаты. Если так долго снимают, может дельный продукт?

Я смотрел (ему ж уж сколько лет то).. Но оговорюсь сразу: для меня сериалы это отдых после рабочего дня, т.е. вот такой формат непринужденный, без чернухи, вполне себе подходит. Можно охарактеризовать: если б можно было бы развидеть, то посмотрел бы с удовольствием вновь.  Единственное там в хорошем качестве наверно нет даже. Стало напрягать качество :)

Последнее время все наше кино смотрю, чет ни как зарубежное не заходит.... тут решил дай ка про спорт импортное что то посмотрю - несколько фильмов в обед подряд попробовал в основном тема про единоборства (бокс, бои....)... все как под копирку : в начале главный герой огребает, вылетает из профессии, потом долго мучается, мечтает, ну и в конце фильма бой где он навалял главному злодею.... т.е. фильмы скорее про психологию, а не про спорт где тяжелая работа, пот и кровь приводят к победе...

ArbNet #:
всё банально по методичкам..

Это, кстати, я могу аргументировать:

1. Любой человек в любой области накапливает опыт. В этом накопленном опыте ему что то нравится, что то нет и так далее. Переходя к разработке фреймоворков: вполне естественно, что имея за плечами опыт разработки в не учебных/академических проектах накапливаешь опыт: какие решения, идеи хорошие и удобные, какие нет. Соотвтственно и свое решение строишь с учетом опыта. Берешь на вооружение хорошее и удобное (и этом может быть алгоритмы, идеи, интерфейсы взаимодействия, те же стандарты, PSR и прочее и прочее) - делаешь свою реализацию, а что показалось плохим и не удобным переделываешь. Если опыта нет (особенно даже если учебного) - то тут будет все по максимуму свое. Но у меня нет цели делать из принципа "главное, чтоб не было похоже на что то существующее" (считаю такой принцип не разумным). по этому да у меня есть решения которые похожи на типовые.

2. Фреймоворк должен быть привычным. Особенно в той парадигме в которой задумал я: он должен подходить для максимального числа проектов (в т.ч. и для чайников - через создание на его базе конструктора сайтов или MCP сервера, помогающего чайнику объяснить словами свои хотелки ИИ, а тот ему сгенерит).    А если расчет и на разработчиков глупо их полностью переучивать. Фреймворк должен помогать выполнять основную задачу, а не загружать мозг дополнительными навыками.  При чем если делать исходя "главное чтоб не как у всех" придется и самому полностью переучиваться, а это не имеет смысла в тех моментах которые считаешь правильными.

ArbNet #:

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

ЗЫ. Эксперимент с обезьянками помнишь, я лично его почти всегда в такие моменты вспоминаю.

У меня есть более важные задачи для размышлений. В данном же случае ты хоть и очень активно "агитируешь" за одну из позиций не привел ни одного веского аргумента. Повторюсь: мы конечно можем обсудить и это, но предлагаю тогда в отдельную тему, если тебе интересен аргументированное обсуждение, а здесь лучше сосредоточиться на коде и решениях.
master32 #:
LFI/path traversal через includeFile() / compileFile() : путь к шаблону никак не ограничен корнем шаблонов и читается напрямую через file_get_contents() .

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

master32 #:
RCE через “обычный текст” шаблона: TextNodeHandler возвращает сырой текст без экранирования/нейтрализации PHP-тегов, а кэш затем исполняется через include .

Тоже понимаю. Пока идеология - не брать лишнюю ответственность. Т.е. разработчик должен позаботится о подготовке данных. Тут честно пока для себя не принял решение окончательное. 

master32 #:
Расхождение compile vs render на отсутствующих ключах: compiled-mode генерирует прямой доступ вида $context['user']['name'] , тогда как render-mode идёт через resolveValue(..., $default) ; это ломает предсказуемость и приводит к предупреждениям PHP на пустых данных.

Пасиб. подумаю.

master32 #:
Потеря внешних локальных переменных в вложенных foreach при компиляции: внутренний цикл затирает список localVars , из-за чего обращения к переменным внешнего цикла компилируются уже как $context[...] .

Тут идея такая то все же localVars это переменные блока. тоже еще у меня нет 100% видения как правильно. Вероятно уже по обкатаю на том же проекте форума - может что пойму для себя. :)

master32 #:
Короткая рекомендация: вынести общий helper safe-access и использовать его и в compiled-mode, и в render-mode. Иначе библиотека остаётся непредсказуемой: один и тот же шаблон на тех же данных ведёт себя по-разному в двух режимах.

Интересно. подумаю

master32 #:
{% csrf %} не вставляет отправляемое поле формы и даёт ложную семантику безопасности.
Docblock обещает “генерацию скрытого поля или вывод токена”, но реализация compile() и render() фактически возвращает только строку токена: в compiled path делается echo $tokenManager->getServerToken($request);, а в render path возвращается сам токен. Браузер не отправляет “просто текст” из <form> как form field, поэтому такой API легко использовать неправильно и остаться без реальной CSRF-защиты.

Тут из собственного опыта. На самом деле надо и так и так. Скорее всего будет добавлена директива типа csrf-input.

master32 #:
Короткая рекомендация: заменить “много strpos на каждом шаге” на линейный сканер или единый regex/token automaton. Это не security issue, но для engine-level кода уже заметная structural cost.

Да. TODO там не спроста :)  обязательно этот вопрос будет изучаться.

master32 #:
покрытия на самые опасные сценарии этого аудита: literal <?php ... ?> внутри text node, path traversal через template path, parity compiled/render на отсутствующих ключах и parity nested-foreach по внешним локальным переменным

Об этом, если честно, даже не подумал...

ArbNet #:
Ну, мне по сути всё понятно уже. Сделать такое в принципе не проблема. Но для моего подхода такой способ всё равно не подходит, я же сделал инструмент для обычных людей, далёких от программирования, им не зачем изучать всякого рода шаблнизаторы для компиляции страниц и тп. Да без определённых знаний конечно не обойтись, но я как мог упростил создание страниц, по моему нет ничего проще чем простой HTML, а у меня XML с некоторыми дополнительными возможностями, вот и всё.

А причем тут "люди".?  Это все работает под капотом. разработчику (а именно эту роль выполняет человек создающий сайт) не обязательно даже будет знать как это работает. очень условно у него будет метод подключения страницы (читай шаблона страницы). и он даже может не знать, что там вообще есть кеширование. Это, на мой взгляд, правильная работа хорошего инструмента. т.е. как пример псевдокодм

ShowPage('index.xml');

Т.е. пользователь сказал что он хочет видеть страницу. Остальное не его проблемы.  Даже могу продемонстрировать на твоем фреймворке. (на той версии что у меня и, оговорюсь, я уже подзабыл его детали реализации, так что только по беглому поиску и взгляду) Правда тут с некоторым допущением у тебя сразу логика запускается некоторая на основе разбора xml. Но ее можно упаковать (в этом случае правда больше подойдет "классический кеш" (наподобии как описан в PSR)

class Manual {
   final public function Load(string $name){
//..некоторый код
      if(file_exists($way)){
        $cache = new FileRelatedCache('/tmp',$way, 86400);
        if ($cache->exsists()) {
          // достаем из кеша
        } else {
          $xml=simplexml_load_file($way);
          if($xml){
            // обработка
            $cache->save($data);
          }
        }
      }
//..некоторый код
   }
}

Т.е. все происходит внутри твоего метода. Это можно и не показывать пользователю, только дать ему инструмент сброса кеша по требованию

ArbNet #:
Я же говорю бездари.. давно уже не воспринимаю современных учёных с точки зрения истинности.
Пофиг. предлагаю не обсуждать. я сам пишу то так то так. Но больше склоняюсь к написанию через "е" по причине того, что так употребляется (по моим наблюдениям) наиболее часто. А у нас в русском языке принимают и даже меняют нормы если большинство применяет определенным образом (как пример род слова "кофе").

Собственно , там и ни чего сложного. Бывают различия например в принципах инвалидации кеша, бывают дополнительные (и интересные) навороты. У меня пока все достаточно просто вот код  (там не большой класс)

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

ArbNet #:
Понятно. То есть ты на основе своего шаблонизатора создаёшь php файлы для каркаса страницы, а потом просто в этих файлах вызываются функции для вставки содержимого. Умно, сам придумал или позаимствовал от куда-то такой подход?
Сам по себе подход такой используется практически везде (и не только в PHP). Он на поверхности и вполне естественный т.к. обуславливается тем как работает PHP. Различия только в конкретике реализации. Тут уже лучше погружаться в код (если есть интерес в обсуждении) - видео (тем более если будет без обратной связи) не имеет смысла, т.к. нужны вопросы - ответы. Так что если есть вопросы по реализации - спрашивай.
ArbNet #:
Мельком, не всё смотрел. Говорить тут не чего, всё банально по методичкам..

Ну вот, а ты говоришь "видео". Какой смысл (если принимать во внимание твое пожелание выше) если ты не смотришь, а все, что смог выдать это "Говорить тут не чего, всё банально по методичкам.."  - для этого ни видео, даже кода не нужно. Ведь обоснования требуют размышлений... :) 

Это самое бесполезное пояснение. Цель данной темы попробовать обсуждать вопросы разработки и ведения проекта. Даже если "по методичке". Что не так? В чем недостаток этих подходов? Для чего делать иначе - какой будет профит?  В таком ключе ты можешь вести обсуждение?

Всего: 1029