Как обезопасить мобильный клиент 1С: промежуточный сайт на Django

Проблемы безопасности мобильного клиента 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‑кодами и контролировать частоту запросов, тем самым повышая уровень безопасности вашего решения.

Экран подтверждения PIN‑кода