Права и безопасность
Кто что может
Доступ к экранам модуля определяется правом на модуль «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. В поставку Маркетплейса они
не входят вовсе.
Два слоя здесь намеренно: проверка работает всегда, а отсутствие файла не может отказать.