Права и безопасность

Кто что может

Доступ к экранам модуля определяется правом на модуль «mrLexndr Мультиязычность» в Настройки → Доступ к модулю.

Право Что даёт
W всё: настройки, перевод, удаление фраз
R смотреть экраны, но не менять
D запрет, включая чтение
не задано наследуется право на главный модуль

Последняя строка — не мелочь. Если право на модуль не выставлено вовсе, работает право на главный модуль: у кого есть доступ к настройкам Битрикса, у того есть и доступ сюда.

А вот явное R на модуле блокирует запись, даже если на главный модуль есть W. Явная настройка сильнее унаследованной.

Что выдаётся при установке

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

Выданные вручную права не трогаются. Досев идёт только тем группам, у которых доступа не было, — иначе установка модуля отменяла бы решения администратора.

Отдельно стоит знать про вкладку «Где используется» на карточке записи словаря: она тоже спрашивает право на модуль, хотя висит на форме ядра. Без этого запрет на модуль её не закрывал, а по ссылке «искать сейчас» запускался обход всего сайта со списком путей файлов проекта в ответе.

Второе такое место — SEO-переводы в карточке элемента. Обычное зеркало полей открывается по праву на чтение, а сохранение SEO-шаблона требует права W: шаблон уезжает в мета-теги публичных страниц, то есть меняет содержимое сайта. Раньше хватало чтения, и осознанно выставленное R здесь не работало. Отказ пишется в журнал, тип TRANSLATE_LANG_MIRROR_SEO_DENIED.

Защита действий

Все действия, которые что-то меняют, идут только методом POST, проверяют токен сессии Битрикса и право на запись. Запросы GET для них отключены: ссылка, которая что-то меняет, однажды окажется в чужом письме.

Что уходит наружу при ошибке

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

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

Для разбора это ничего не усложняет: всё, что раньше было в ответе, лежит в журнале, и там же видно, какой запрос его вызвал.

Экранирование

Пользовательские данные выводятся в разметку через штатное экранирование Битрикса. Адреса в обработчиках режима правки экранируются отдельно, как строки JavaScript.

Защита от формул в таблицах

Каждая ячейка выгрузки проверяется: если значение начинается с =, +, -, @ или пробельного символа, к нему добавляется апостроф.

Без этого фраза вроде «-15% на всё» открывается в Excel как формула. В лучшем случае это ошибка вычисления, в худшем — исполняемое выражение на чужой машине.

Импорт принимает только колонку кода и языковые колонки. Любая другая в заголовке останавливает загрузку: файл с лишними колонками — это почти всегда не тот файл.

Сеть

Проверка сертификата включена во всех клиентах.

Ключей провайдеров перевода в модуле нет вообще. Авторизация идёт по хешу лицензии Битрикса; ключи Яндекса и Google живут на стороне сервиса. Украсть из настроек модуля нечего.

Адрес сервиса ограничен списком хостов модуля. Отладочная настройка адреса принимает не любой https-адрес: хост обязан быть в списке, и его адрес проверяется на приватные и служебные диапазоны. По этому адресу уходит ключ лицензии, и произвольный хост в настройке означал бы, что его можно увести настройкой сайта. Стенд добавляется правкой поставки, а не настройкой.

Текст сетевого сбоя не называет ни адрес, ни подробности транспорта. Вместе они отвечали на вопрос «доступен ли такой-то хост с этого сервера». Подробности идут в журнал, тип TRANSLATE_SAAS_NETWORK.

Повторы запросов выполняются только для статусов, при которых запрос заведомо не дошёл до платной работы, либо когда у запроса есть ключ идемпотентности. См. Сеть, таймауты и повторы.

Консольные скрипты

Служебные скрипты модуля работают только из консоли: первая исполняемая строка — проверка способа запуска, веб-запрос получает 404. В поставку Маркетплейса они не входят вовсе.

Два слоя здесь намеренно: проверка работает всегда, а отсутствие файла не может отказать.