Проблемы безопасности мобильного клиента 1С
Многие разработчики сталкиваются с тем, что после публикации мобильного клиента 1С в магазинах приложений любой пользователь может скачать приложение и попытаться получить доступ к базе данных. Это открывает риск просмотра списка пользователей, подбора паролей и других атак.
Решение: промежуточный сайт на Django
В сборщике мобильных приложений 1С предусмотрена возможность добавить промежуточный сайт. Мы предлагаем реализовать его на Django, чтобы:
- пользователь вводил номер телефона или email;
- получал PIN‑код на указанный контакт;
- вводил PIN‑код в приложении;
- после проверки получал доступ к реальной базе 1С.
Как это работает
После установки мобильного клиента пользователь сразу перенаправляется на ваш Django‑сайт. Там он проходит простую форму авторизации: вводит телефон/почту, получает одноразовый PIN‑код, вводит его в приложении. Сервер проверяет код и выдаёт токен доступа, который приложение использует для дальнейших запросов к 1С.
Преимущества решения
- Никакого раскрытия списка пользователей и паролей в самом приложении;
- Возможность ограничить количество запросов (rate‑limiting) и тем самым предотвратить подбор PIN‑кода;
- Гибкая настройка логики проверки (например, двухфакторная аутентификация);
- Отдельный лог и аудит действий пользователей.
Технические детали
Для реализации понадобится:
- Проект Django с настройкой
django‑rest‑frameworkдля API‑эндпоинтов; - Модель
UserVerificationдля хранения временных PIN‑кодов и их срока действия; - Вьюшки для генерации и отправки PIN‑кода (см. документацию по отправке email или SMS‑API);
- Middleware или сторонняя библиотека
django‑ratelimitдля ограничения количества запросов к эндпоинту проверки PIN‑кода.
После успешной проверки пользователь получает токен (например, JWT), который сохраняется в приложении и используется для всех последующих запросов к 1С.
Ниже приведён пример простого Django‑view, который генерирует PIN‑код и отправляет его пользователю:
from django.shortcuts import render
from django.core.mail import send_mail
import random
# ...
def send_pin(request):
phone_or_email = request.POST.get('contact')
pin = str(random.randint(100000, 999999))
# Сохраняем pin в базе с TTL
# Отправляем пользователю
send_mail(
'Ваш PIN‑код',
f'Ваш PIN: {pin}',
'noreply@example.com',
[phone_or_email],
)
return render(request, 'pin_sent.html')
Для ограничения запросов можно добавить декоратор:
@ratelimit(key='ip', rate='5/m', block=True)
Вывод
Промежуточный сайт на Django – это надёжный способ защитить мобильный клиент 1С от несанкционированного доступа. Он позволяет централизовать аутентификацию, управлять PIN‑кодами и контролировать частоту запросов, тем самым повышая уровень безопасности вашего решения.
