Вопрос к разработчикам о целесообразности использования экстраполя file
Roffun |
|
---|---|
Добрый день, у меня появился вопрос к разработчикам Cotonti насчет целесообразности использования экстраполей типа file. Создание экстраполя доступно по умолчанию для многих модулей и плагинов. Получается что его можно создать без проблем, и разместить в шаблоне. После создания экстраполя его можно разместить для всех, или выборочно для определенных групп/пользователей и тд, в зависимости от условных операторов, в которые будет обрамлен тег экстраполя. Получается что условные операторы это единственый вариант для регулирования видимости в шаблоне, с точки зрения обычного пользователя, который скачал сборку, и решил добавить несколько полей. Вопрос: Создание экстраполя file c проверкой расширений txt,html, и размещение его в шаблон , обрамленное условием "только для админа" несет в себе уязвимость ? если да, то почему экстраполе этого типа доступно для создания без пояснения о риске? Есть плагин confirmtheright, который при установке создает два экстраполя типа file для users, и на этом его работа заканчивается. Дальше работают теги размещенные в шаблон: <!-- IF {PHP.cot_plugins_active.confirmtheright} AND {PHP.usr.isadmin} --> <tr> <td>{USERS_PROFILE_CONFIRMTHERIGHT1_TITLE} <small>( {PHP.cot_extrafields.cot_users.CONFIRMTHERIGHT1.field_variants} )</small></td> <td>{USERS_PROFILE_CONFIRMTHERIGHT1}</td> </tr> <tr> <td>{USERS_PROFILE_CONFIRMTHERIGHT2_TITLE} <small>( {PHP.cot_extrafields.cot_users.CONFIRMTHERIGHT2.field_variants} )</small></td> <td>{USERS_PROFILE_CONFIRMTHERIGHT2}</td> </tr> <!-- ENDIF --> Macik написал что есть потенциальная уязвимость:
Порекомендовал сделать проверку:
Дело в том, что если исходить из вышесказанного, то экстраполе file использовать нельзя, так как сделать проверку иначе как в шаблоне, со стороны обычного пользователя не получится. Сами экстраполя создаются для использования в шаблоне. Или каждому пользователю который захочет создать экстраполе, нужно будет писать обработчик собственный, так зачем тогда экстраполе нужно? Сама логика ситуации заключается в том, что нужно было каждый раз загружать/удалять на сервер проверочный файл, или создавать экстраполе file, для каждого сайта, чтобы подтверждать права с помощью загрузки текстового или html файла на сервер. Поэтому решено было сделать плагин, который бы это поле (несколько) создавал. А чтобы скрыть от других пользователей кроме админа, использовался условный оператор в шаблоне. Разница между установкой плагина и ручным созданием поля для каждого сайта - только в автоматизации процесса создания поля.
Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|
Macik |
|
---|---|
Повторять дисскуссию не буду. Попробую объяснить. 2. Использование условий в шаблонах, это, в принципе, своего рода костыль (точнее не правильное испольование ). При разработке правильных приложений алгоритмическая логика должна быть максимально отделена от (логики) отображения. Т.е. в идеале все должно стремится к варианту проектирования по типу MVC (или аналогичному). Единственно правильная логика (условия) в шаблонах, которые там «правильно» использовать, это логика отображения конечных данных. Т.е., если простыми словами, варианты оформления данных (например каким цветом вывести счетчик взависимости от чисел на нем, или какую иконку пользователя вывести в зависимости от того залогинен ли он). У тебя, в данном случае, в шаблоне логика уровня приложения (которая влияет на его функционал). 3. Ты правильно пишешь, что разница между плагином и ручной установкой только в создании поля. Но почему-то полагаешь, что поле должно уметь само решать какие данные фильтровать, какие нет. Но это не правильно, т.к. это всегда было задачей расширения. Отвечая на поставленные вопросы:
Подводя итог, тут проблема в не правильном подходе. Для решения этой задачи, да, нужен отдельный плагин, но который берет на себя весь цикл: получение данных, обработка, хранение. Причем лучше использовать хук tools, чтобы страница ввода была в админской части. https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
Roffun |
|
---|---|
#41059 Macik: 3. Ты правильно пишешь, что разница между плагином и ручной установкой только в создании поля. Но почему-то полагаешь, что поле должно уметь само решать какие данные фильтровать, какие нет. Но это не правильно, т.к. это всегда было задачей расширения. А рзве у пользователя есть другие варианты кром проверок в шаблоне типа? <!-- IF {PHP.usr.isadmin} -->{ЭКСТРАПОЛЕ}<!-- ENDIF --> Если да, то где они написаны ? При создании экстраполя ничего подобного не пишется..
Я понял твою логику, она верна если цель - создание плагина, с отдельным загрузчиком. Но такой цели не было. Была одна цель : создать автоматически экстраполе файл, которое в свою очередь создает загрузчик проверочных файлов типа html или txt в корень сайта для подтверждения прав с последующим удалением. Задача: решить эту проблему средствами доступными обычному пользователю, у которого просто есть сайт на Cotonti, он ничего не знает о потенциальных уязвимостях и тем более разработках, он просто хочет получить возможность загрузить проверочный файл, и после удалить его не используя ftp.
Теперь давай представим что этот пользователь пришел на форум, почитал топики, понял что есть какой-то механизм под названием экстраполя, и задал вопрос, есть ли возможность сделать такую фишку на базе этих экстраполей? Какой ответ в таком случае получил бы пользователь ?
Если смотреть с точки зрения этого пользователя, и наличия подручных возможностей, то все сводится к экстраполям в профиле. Значит нужно создать экстраполе file, и разместить его в шаблоне. При создании поля подсказка указывает, что теги будут работать в:
В users.profile.tpl - как раз то что нужно. Поле создано, подсказка показывает где можно использовать, указывает нужные теги, остается только в шаблон их вставить. Никаких предупреждений система не выдает, значит можно пользоваться, остается только разместить в шаблоне.
Вопрос: что делать пользователю в такой ситуации ? не пользоваться экстраполем типа file вообще потому что это уязвимость ? если да, то почему оно доступно для создания, и еще совет куда вставить дается, никаких предупреждений.
Плагин появился только для создания экстраполя. Без использования плагина можно все это проделать из админки самостоятельно, дальше работает механизм экстраполя file. Он вообще ничего не делает кроме создания экстраполя. Рассуждать о потенциальных угрозах можно в теории, но на практике меня интересует ответ на один - единственный вопрос: Для чего предназначено экстраполе file для cot_users ? если его нельзя использовать, я просто удалю плагин который создает его и на этом закончится вопрос. Проверка на сервере решит вопрос безопасности ? например: если на хук extrafields.import.file.first подцепить: global $usr; if($usr['isadmin']){ cot_error('Вы не можете загружать проверочные файлы', $inputname); } Этого будет достаточно ?
Добавлено 10 минут спустя: #41059 Macik: Подводя итог, тут проблема в не правильном подходе. Для решения этой задачи, да, нужен отдельный плагин, но который берет на себя весь цикл: получение данных, обработка, хранение. Причем лучше использовать хук tools, чтобы страница ввода была в админской части. Плагин создавался исключительно для автоматизации создания экстраполя, а дальше расчет на механизм api экстраполей, зачем мне делать отдельную страницу, писать обработчики, если смысл был именно создать экстраполе а не работать вместо него ? Кстати с самого начала в описании к плагину было: Важно: плагин создавался из рассчета на одноразовые проверки, по принципу загрузил проверил удалил. На данный момент в нем два поля, это значит что одновременно может быть загружено максимум два файла. Это значит что постоянное нахождение на сервере файла не входило в планы, а только загрузка - проверка - удаление. В том числе удаление плагина (а значит поля). Добавлено 1 час спустя: ========================================== Добавил проверку , является ли пользователь админом. Цель создания плагина указана выше - автоматическое создание экстраполя. Благодарю за конструктивный развернутый ответ, Macik, в любом случае информация полезная. Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|
|
This post was edited by Roffun (2015-10-04 10:27, 9 years ago) |
Macik |
|
---|---|
#41061 Roffun:#41059 Macik:3. Ты правильно пишешь, что разница между плагином и ручной установкой только в создании поля. Но почему-то полагаешь, что поле должно уметь само решать какие данные фильтровать, какие нет. Но это не правильно, т.к. это всегда было задачей расширения. Экстраполя сами по себе не предназначены для «выборочного» использования. Поэтому никойкой дополнительной проверки нет. Расчет на то, что они создаются для всех пользователей и для всех элементов сущности к которой привязаны.
Да, в таком виде цель была достигнута. Я лишь предупредил о том, что такое использование может быть опасно.
Именно потому, что конечный пользователь ничего не знает — задача разработчика сайта/плагина максимально подумать за него и сделать «защиту от дурака» или умышленного вредительства. (А удалить можно тоже через механизм экстраполей.)
Все верно. И тут НЕ сказано добавьте «условий в шаблон», чтобы скрыть какие-то поля у части пользователей. Потому, что использование экстраполя подразумевается равнозначным для всех пользователей без исключения.
Потому, что механизм универсален. И надо включать голову, если мы хотим использовать его несколько не стандартно.
Можно. И оно предназначено для загрузки пользователями файлов. Но ответственность за «грабли» лежит на создателе этого экстраполя. А именно какие файлы допустимы к загрузке и в какой каталог они загружаются. Статндартный каталог для хранения файлов более безопасен, чем любой другой.
В таком виде будет работать не правильно. Дал комментарии вна гитхабе
Потому, что в таком виде (что создание поля руками, что создание поля плагином) вело к возможной уязвимости сайта.
Всегда рад. Моя задача, как раз, не «настучать по рукам», а показать подводные камни и объяснить. https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F |
Roffun |
|
---|---|
Ну вот, теперь кажется все стало на свои места, и изначальная цель создания плагина озвучена ( мною ), и потенциальная уязвимость при работе с экстраполями file разобрана для наглядности , с примерами и комментариями ( macik ), в любом случае считаю дискуссию очень полезной, почерпнул опыт работы с экстраполями, и их проверки, пригодится не раз. Соответствующие правки добавлены в плагин. Улетел на другую планету, а там почты нету.. https://www.cotonti.com/forums/45298?m=posts
|