Файлы к которым нельзя обращаться напрямую должны
Цитатник веб-разработчиков В тексте курса вы встретите цитаты, высказанные в разное время разработчиками системы и разработчиками проектов на базе Bitrix Framework. Надеемся, что такие неформальные замечания внесут некоторое разнообразие в процесс изучения. Заодно опытные специалисты поделятся и своим опытом.
Имена авторов цитат даются в том написании, в каком авторы зарегистрировали себя на сайте "1С-Битрикс". .
Евгений Смолин: Сам кувыркался с непонятками (пока курсы учебные не прочитал и руками не попробовал то, что там написано). Битрикс из тех систем, где изучение "методом тыка" не очень эффективно без предварительного изучения учебных курсов. Уважаемые новички, потратьте немного своего драгоценного времени, пройдите пару-тройку учебных курсов и масса вопросов просто испарится — там есть ответы на множество вопросов.
Курс для разработчиков — продолжение линейки учебных курсов по Bitrix Framework. Получение сертификата по курсу рекомендуется после успешной сдачи тестов по всей линейке курсов, так как без понятия о работе Контент-менеджера и Администратора создание успешных сайтов будет затруднено.
Чтобы научиться программировать в Bitrix Framework, нет необходимости изучать всю линейку курсов. Но есть моменты, которые необходимо знать разработчикам о системе, они раскрыты в начальных курсах:
- Интерфейс программы — в главе Элементы управления курса Контент-менеджер.
- Компоненты 2.0 (начальные сведения) в главе Компоненты 2.0 (начальные сведения) курса Контент-менеджер.
- Информационные блоки — в главе Информационные блоки (начальные сведения) курса Контент-менеджер.
- Управление доступом к файлам, элементам контента, модулям и другие права доступа в главе Управление доступом курса Администратор. Базовый.
- Работа с инструментами системы — в главе Работа с инструментами курса Администратор. Базовый.
- Модуль Поиск — в главе Поиск курса Администратор. Базовый.
- Вся информация по администрированию модулей размещена в курсах:
-
— модули "1С-Битрикс: Управление сайтом" — модули "1С-Битрикс: Управление сайтом", связанные с коммерческой деятельностью в Интернете. — модули "1С-Битрикс: Корпоративный портал"
Как построен курс
Общепринятая градация квалификации разработчиков в рамках курса обозначает что:
- Junior сможет создавать простые сайты работая со штатными компонентами и модифицируя их шаблоны.
- Middle разработчик может работать с API Bitrix Framework.
- Senior умеет работать над производительностью и безопасностью сайтов, создавать свои модули и компоненты.
Примечание: Такое построение удобно для пошагового изучения принципов работы Bitrix Framework. По этому же принципу построены и тесты. Но такая структура не очень удобна для использования содержания курса как постоянного источника информации. Что бы переключить курс в режим Справочника, воспользуйтесь переключателем в правом углу «шапки» курса.
Начальные требования к подготовке
Для успешного изучения курса и овладения мастерством разработки сайтов на Bitrix Framework необходимо владеть (хотя бы на начальном уровне):
- основами PHP, баз данных;
- основами HTML, CSS.
У нас часто спрашивают, сколько нужно заплатить
Курс полностью бесплатен. Изучение курса, прохождение итоговых тестов и получение сертификатов — ничего из этого оплачивать не нужно.
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
В конце каждого урока есть кнопка Прочитано! . При клике на неё в Вашу итоговую таблицу опыта добавляется то количество баллов, которое указано в прочитанном После нажатия кнопки Прочитано! появится
окно подтверждения:
уроке.
Периодически мы заново оцениваем сложность уроков, увеличивая/уменьшая число баллов, поэтому итоговое количество набранных Вами баллов может отличаться от максимально возможного. Не переживайте! Отличный результат — это если общее число набранных Вами баллов отличается от максимального на 1-2%.
Тесты
После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче последовательности тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.
Также Вы можете поделиться ссылкой на страницу со своими сертификатами. Для этого на странице Моё обучение отметьте опцию Разрешить публичный доступ к резюме студента
и скопируйте ссылку на страницу резюме
. Страница с Вашим резюме будет доступна всем, кому Вы отправите ссылку на неё.
Комментарии к статьям
На каждой странице курса авторизованный на сайте посетитель может дать комментарий к содержимому страницы. Комментарий — не форум, там не ведётся обсуждений или разъяснений. Это инструмент для сообщений нам об ошибках, неточностях. Для отправки комментария воспользуйтесь расположенной в правом нижнем углу окна браузера кнопкой: 
Что дальше?
Одновременно с изучением курса Разработчик Bitrix Framework вам придётся обращаться к информации о других технологиях Bitrix Framework. Эта информация размещена в следующих курсах:
Для преподавания офлайн
Если данный курс берётся в качестве основы для офлайнового преподавания, то рекомендуемая продолжительность: 5 дней (40 академических часов).
Если нет интернета
Скачать материалы курса в формате EPUB. Файлы формата EPUB Чем открыть файл на
Android:
EPUB Reader
CoolReader
FBReader
Moon+ Reader
eBoox
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
iOS
Marvin for iOS
ShortBook
Linux:
Calibre
FBReader
Cool Reader
Okular обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса. Версия файла — от 06.03.2023.
Мастера
Все мастера находятся в папке /bitrix/wizards/ . Системные мастера находятся в директории /bitrix/wizards/bitrix/ . Содержимое этой папки обновляется системой SiteUpdate и не может изменяться пользователем. Пользовательские мастера могут находиться в любых других подпапках директории /bitrix/wizards/ или прямо в директории /bitrix/wizards/ .
Файлы, к которым нельзя обращаться напрямую, должны содержать в начале следующий код:
- wizard.php — определяются все шаги мастера. Этот файл должен всегда присутствовать в папке мастера;
- .description.php — название, описание, а также ряд других характеристик мастера. Обязательный.
- Директория lang — языковые сообщения (перевод) мастера. В ней находятся директории с именами, равными кодам языков.
- другие папки и файлы с ресурсами — вспомогательные ресурсы мастера.
В файле определяется массив $arWizardDescription , который описывает мастер. Этот массив может иметь следующие ключи:
| Ключ | Значение |
|---|---|
| "NAME" | название мастера; |
| "DESCRIPTION" | описание мастера; |
| "ICON" | иконка мастера, путь к файлу относительно папки мастера; |
| "VERSION" | версия мастера; |
| "DEPENDENCIES" | зависимости мастера от модулей. Значением этого ключа должен быть массив вида Array("ID модуля"=>"версия модуля" [, . ] ); |
| "STEPS" | массив названий классов, определяющих шаги в файле wizard.php; |
| "TEMPLATES" | шаблоны мастера. Значением этого ключа должен быть массив, элементами которого должен быть массив, имеющий следующие ключи: "CLASS" — имя класса, описывающего шаблон; "SCRIPT" — путь к файлу, в котором определён класс шаблона относительно папки мастера; "STEP" — ID шага, для которого определяется шаблон. Если ключ "STEP" не указан, шаблон будет определён для всех шагов мастера; |
По умолчанию первый элемент в массиве названий классов является первым шагом мастера. Именно этот шаг появляется при запуске мастера. Изменить первый шаг мастера можно динамически с помощью метода CWizardBase::SetFirstStep .
В файле wizard.php определяются все шаги и их содержимое. Каждый шаг определяется классом, который обязательно должен наследоваться от класса CWizardStep . В классе шага необходимо переопределить 3 метода:
- InitStep – вызывается при добавлении шага в мастер. Метод предназначен для инициализации свойств шага: идентификатора (ID), заголовка, подзаголовка, кнопок перехода на следующие шаги и др. В этом методе обязательно нужно определить ID шага;
- ShowStep – вызывается в момент показа шага пользователю. Метод предназначен для определения содержимого шага: в переменную $this->content необходимо записать весь вывод шага;
- OnPostForm – вызывается при нажатии на любую из кнопок навигации мастера. В этом методе можно проверить входные данные, вернуть ошибки, изменить текущий шаг, выполнить любые другие действия;
Методы ShowStep и OnPostForm переопределять необязательно. Метод InitStep обязательно должен присутствовать в классе, т.к. в нем с помощью функции SetStepID определяется ID шага. В случае динамического определения шагов устанавливать ID шага в InitStep необязательно.
Класс СWizardBase является оболочкой мастера и содержит методы общие для всех шагов (работа с переменными мастера, управление кнопками навигации и др.). Для получения доступа к методам класса СWizardBase в теле переопределяемых функций ( InitStep , ShowStep , OnPostFrom ) нужно получить объект мастера с помощью метода CWizardStep::GetWizard :
Для каждого шага, добавляемого в мастер, создаётся экземпляр класса CWizardStep . В переопределяемых функциях шага методы класса CWizardStep доступны через переменную-псевдоним $this . Каждый шаг мастера сам определяет, какие кнопки навигации (Назад, Далее, Готово, Отмена) будут показаны, и на какой шаг они будут вести. Названия кнопок можно изменить по своему усмотрению.
Как правило, содержимое шага представляет собой набор полей Web-формы. Для упрощения работы с элементами Web-формы класс CWizardStep содержит методы для создания текстовых полей, переключателей, флажков и др.
Name already in use
bitrix_codestyle / bitrix_codestyle.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Вы ОБЯЗАНЫ использовать кодировку UTF-8 для всех файлов bitrix и для кодировки БД.
Вы ОБЯЗАНЫ использовать отступ в 2 пробела в .php файлах шаблонов, для остальных .php файлов вы ОБЯЗАНЫ использовать отступ в 4 пробела
Базовый набор знаний
Вам СЛЕДУЕТ понимать и знать порядок выполнения страницы
Вам СЛЕДУЕТ понимать и знать специальные константы
Вам СЛЕДУЕТ понимать и знать передачу данных в компонентах
Вам СЛЕДУЕТ понимать и знать что из себя представляют и как работают модули bitrix
Вам СЛЕДУЕТ понимать и знать что из себя представляют и как работают компоненты bitrix
В Bitrix есть такое понятие как «События», которые вызывают выполнение определенного кода по наступлению определенного события. Почти все головоломки можно решить с помощью событий. Событий очень много, вам СЛЕДУЕТ ознакомиться с ними в Bitrix API. Регистрировать обработчик события можно в файле init.php . События модуля инфоблоков;
Постулаты разработки bitrix проектов
Вам СЛЕДУЕТ использовать стандартные компоненты для решения типовых задач(процент которых очень велик), а не писать свои компоненты и куски кода для решения такого рода задач.
Вы ОБЯЗАНЫ НЕ обращаться к БД напрямую(вне модулей), изменять её. Все действия с БД ОБЯЗАНЫ происходить только через bitrix API. Структура данных может меняться от версии к версии, а функции сохраняют обратную совместимость.
Вам СЛЕДУЕТ НЕ писать код HTML в код PHP для изменения представления данных. Логика — это сам компонент, представление — это шаблон вывода компонента. Шаблон существенно проще, чем компонент в целом. Нет необходимости изменять логику компонента для изменения особенностей показа его данных. Для одной логики может быть несколько представлений, в том числе зависящих от шаблона текущего сайта.
Собственные компоненты и шаблоны — ОБЯЗАНЫ находиться в собственном пространстве имен. Кастомизируя штатные компоненты и шаблоны, разрабатывая собственные, размещайте их в собственном пространстве имен. При обновлении системы все внесенные изменения в пространстве bitrix затираются.
Вы ОБЯЗАНЫ НЕ править код ядра в силу нескольких причин:
При обновлении системы внесенные изменения затрутся
При изменении ядра владелец лицензии теряет право на техническую поддержку
При изменении ядра разработчиком сайта возможна некорректная работа системы, так как ядро — сложная система, требующая учета работы всех модулей.
Ядро продукта — файлы, находящиеся в директории /bitrix/modules/ а так же файлы системных компонентов: /bitrix/components/bitrix/ .
Практика разработки bitrix проектов
Вы ОБЯЗАНЫ писать свои функции, подключать библиотеки только в файле init.php который находится в /bitrix/php_interface/ , причем вам СЛЕДУЕТ соблюдать следующие правила:
init.php содержит только подключения файлов
Если функционал используется только на одном из сайтов в системе, то он выносится в свой /SITE_ID/init.php
Обработчики событий лучше группировать в одном файле и тщательно аннотировать где они используются и какая задача перед ними стоит
- Добавление частной логики при кастомизации шаблона компонента ОБЯЗАНО происходить только через файл result_modifier.php который должен быть расположен в шаблоне компонента. В этом файле можно переопределить или дополнить массив $arResult который в свою очередь выводиться в самом файле шаблона template.php
При необходимости модификации данных компонента с включенным кешированием вы ОБЯЗАНЫ использовать файл component_epilog.php который необходимо положить в шаблон компонента. Данный файл подключается после выполнения шаблона
Файлы, к которым нельзя обращаться напрямую (они не должны выполняться, будучи вызванными напрямую по адресу в браузере), ОБЯЗАНЫ содержать в начале следующий код проверки:
К таким файлам относится все, что работает внутри продукта, например: шаблоны сайтов, шаблоны компонента, файлы .parameters.php и .description.php .
- Для реализации AJAX вы ОБЯЗАНЫ НЕ создавать дополнительного шаблона для этих целей, а использовать следующую конструкцию:
Способы внесения изменений и порядок их применения, которого вы ОБЯЗАНЫ придерживаться:
Сначала попытайтесь сделать это редактированием шаблона самого сайта и файлов CSS
Если предыдущее невозможно, то попытайтесь сделать это средствами редактирования страницы сайта
Примечание: К этому пункту нужно подходить осторожно. Бездумное добавление кода может привести к тому, что компоненты будут обрамляться кодом, который должен быть в шаблоне компонента, а не на странице
При невозможности реализации задачи с помощью первых вариантов переходите к редактированию шаблонов компонента и файлов CSS компонента, либо изменяйте вывод данных с помощью файлов result_modifier.php и component_epilog.php
Используйте обработчики событий, которые позволяют решать очень широкий спектр задач
Кастомизация компонента или разработка собственного компонента или модуля — последний из возможных вариантов получения нештатного функционала.
Вы ОБЯЗАНЫ удалять неиспользуемый, сгенерированный bitrix’ом код для ваших шаблонов компонент, вызовов простых компонент в комплексных компонентах.
ВЫ ОБЯЗАНЫ удалять неиспользуемые, сгенерированные bitrix’ом файлы для ваших шаблонов компонент(простых и комплексных)
ВЫ ОБЯЗАНЫ удалять неиспользуемые, сгенерированные bitrix’ом простые компоненты для комплексных компонент.
Следующие правила именования наследуют и расширяют правила, описанные в PHP code style PSR 1/2/3.
Массивы СЛЕДУЕТ именовать с префиксом ar , при этом общий формат написание идентификатора — camelCase. Например, $arResult , $arModifiedUsers
Объект класса CDBResult СЛЕДУЕТ начинать с префикса db , при этом общий формат написание идентификатора — camelCase. Например, $dbResult
Именование индексов массивов СЛЕДУЕТ писать в формате «UPPER_CASE» с разделением слов символом подчеркивания( _ ). Это общепринятая норма bitrix сообщества
Вы ОБЯЗАНЫ именовать файлы и папки только в формате under_score . Например, main , php_interface
При создании шаблона компонента или шаблона сайта вы ОБЯЗАНЫ назвать шаблон main , если необходимо создать только один шаблон. Вам СЛЕДУЕТ назвать шаблон main , если у вас будет несколько шаблонов одного и того же компонента и один из них будет выполнять более важную роль, нежели другой(ие). Данное правило не распространяется на равноценные по значимости шаблоны, например paginator_top , paginator_bottom
Вы ОБЯЗАНЫ использовать формат lower_case для именования следующих сущностей:
Идентификатор (ID) сайтов
Идентификатор (ID) шаблонов сайтов
Идентификатор (ID) шаблонов компонент
Идентификатор (ID) типов инфоблоков
Символьный код инфобоков
Символьный код разделов инфоблоков
Символьный код элементов инфоблоков
Вы ОБЯЗАНЫ использовать формат UPPER_CASE для именования следующих сущностей:
Названия типов почтовых событий
Код пользовательских свойств
Код свойств элементов инфоблоков
Вам СЛЕДУЕТ грамотно именовать файлы, папки, разделы и другие сущность bitrix.
Есть ли какие-либо различия в безопасности между использованием .htaccess и перемещением всех файлов за пределы корневого веб-каталога?
Я пытаюсь решить, следует ли использовать файлы .htaccess в каждом подкаталоге, чтобы отклонять все запросы для определенных файлов (при этом также запрещая индексы каталогов), или более безопасно перемещать все файлы, кроме основных файлов (index.php , .htaccess, robots.txt) вне корневого каталога и вызывать их из индексного файла.
Есть ли какие-либо критические различия в безопасности между этими двумя методами защиты файлов в моем веб-приложении?
Вот представление того, как выглядит файл .htaccess в корневом каталоге.
Однако это не помешало бы кому-либо получить доступ к файлу, если бы он знал структуру каталогов, такую как https: / /www.example.com/security/please_dont_look.cfg
Хотя этот файл ничего не печатает, я не хочу, чтобы кто-нибудь знал о его существовании, и не хочу специального решения, такого как использование modredirect для перенаправления вызовов к определенным файлам.
Я мог бы использовать файл .htaccess в каждом каталоге, например:
Является ли одно решение более пуленепробиваемым, чем другое?
1 ответ
Как всегда в таких сложных системах, безопасность здесь заключается в наличии нескольких линий защиты, простоте и попытках предотвратить как можно больше векторов атак.
Теоретически оба решения должны обеспечивать одинаковый уровень безопасности — файлы не будут доступны в любом случае.
Я бы рекомендовал переместить файлы, к которым нельзя обращаться напрямую, в каталог за пределами корневого веб-каталога. Довольно легко испортить файлы htaccess, и это просто невозможно, когда вы перемещаете файлы за пределы своего корневого веб-сайта. Это также предотвратит временные атаки на структуру каталогов вашего сервера: чтение файлов htaccess требует временных затрат, которые можно измерить, особенно если ваши файлы htaccess становятся большими и у вас их много для каждого подкаталога. На самом деле я бы рекомендовал полностью пропустить htaccess, просто отключите индексы прямо в конфигурации вашего vhost, чтобы Apache вообще не искать файлы htaccess, что ускоряет ваш сайт.
Кроме того, если вы запускаете php через fcgi, вам следует запретить доступ к файлам на уровне файловой системы для apache и просто разрешить доступ с php. При такой настройке должно быть совершенно невозможно получить доступ к вашим файлам, атакуя веб-сервер (за исключением php), если у вас нет уязвимости для повышения привилегий (в этом случае вы все равно облажались).
Единственный способ получить доступ к вашим конфиденциальным файлам в этой настройке — убедить PHP прочитать файл или вмешаться в файловую систему, то есть создать жесткую ссылку из корневого веб-каталога в каталог «конфиденциальные файлы вне корневого веб-каталога». Предотвращение этого сводится к тому, чтобы ваша конфигурация PHP была как можно более строгой, создание файлов внутри веб-корневого каталога запрещено и, что наиболее важно, гарантирует, что само приложение PHP не уязвимо.