Саморегистрируемся для самовыгула самособаки в условиях самоизоляции

wi_biiymeryofo4i9uazexndau0.png

Решил протестировать информационную систему Нижнего Новгорода для тех, кто «хочет выйти на улицу» — цитата с сайта правительства Нижегородской области. Я не знаю, на основании каких федеральных и региональных законов требуется получение qr-кода для прогулки с псом, какой правовой статус имеет qr-код, поэтому эти вопросы предлагаю оставить за кадром. Если тут есть законники — напишите свой пост, мне, как и многим, было бы интересно прочитать разъяснение. Я же сосредоточусь на технической составляющей.

Если одним предложением — система сделана вполне удобно (по крайней мере на настольном компе, на мобильном устройстве не смотрел), но, на момент написания поста, похоже, не работает.

Интерфейс довольно прост. Пользователю предлагается идентифицироваться по номеру телефона, и пройти аутентификацию с помощью одноразового пароля из СМС. У меня войти в систему получилось два раза из пяти. Ещё один раз не пришла СМС, и два раза отобразилась надпись «сервер недоступен».

za_wyczppiu4h5meu1-zxzvytia.png

Дальше нужно заполнить персональные данные

lomoonfpwq4odau2cruoov9i9c8.png

и форму заявки:

aaapmutjo8copr-1f7cewkfb71w.png

Как видите, валидации полей нет (нет привязки адресов к ГИС, не проверяется формат номера документа). Ну да ладно, я уверен, что сознательные граждане будут заполнять поля адресов честно. Далее следует самая запутанная форма интерфейса

fwjkztwqpaer8bj0dzscj08j_0e.png

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

Само разрешение выглядит так:

gsaqegfmi8mwtgnaruquv1jl29s.png

Если декодировать qr-код, то видно, что там содержится ссылка вида
https://nn-card.ru/policeman-page? covid_token={guid}

Видимо, предполагается, что policeman просканирует страничку сканером qr-кодов, который перебросит его на страницу портала. Решение спорное, но обсудим его позже, а пока давайте попробуем перейти по ссылке.

aetct7ydwci6ase4yhi0egvboic.png

Ой.

Вместо моей заявки отобразилась заявка какого-то шутника. Протестировал несколько раз, поведение повторяется. По выданному мне идентификатору возвращается не моя заявка. Уважаемые разработчики, у вас, наверное, код из рабочей ветки случайно задеплоился на боевой сервер. Иначе ничем объяснить такое поведение не могу — оно видно даже на smoke-тестах.

Система периодически устаёт и ложится отдохнуть — то не получается войти, то оставить заявку, то проверить заявку по идентификатору, то посмотреть список своих заявок. Надеюсь, что всё это исправят, а то дружинникам придётся делать хорошую мину при плохой игре — сосредоточенно смотреть на пустой экран своего смартфона, а после милостиво пропускать проверяемого гражданина.

Моё скромное мнение насчёт решения, когда в qr коде возвращается ссылка, а не идентификатор.

Буквально пару недель назад мои студенты делали похожую систему (регистрация qr-кодов в базе и сохранение отметок об их сканировании). Помимо сервера мы разработали ещё и мобильное приложение, которое хранило endpoint, на который нужно отправлять идентификаторы. Первое очевидное преимущество отправки идентификаторов на прошитый в приложении адрес — можно поменять endpoint, при этом все ранее выданные идентификаторы останутся валидными. Второй критически важный момент — невозможность подсовывать ложные ссылки.

В текущем же варианте реализации любой сообразительный гражданин регистрирует фишинговый домен https://nn_card.ru и динамически генерирует там любой контент. Сильно сомневаюсь, что рядовой проверяющий заметит подвох.

С другой стороны я понимаю, что текущая система разрабатывалась в спешке и без денег, поэтому не было возможности сделать ещё и мобильное приложение для проверяющих. В таких обстоятельствах кодирование ссылки в qr-коде — единственное решение.

Ещё одно крайне важное замечание относится к соблюдению 152-ФЗ «О персональных данных». Во первых пользователь при заполнении формы нигде не подтверждает своё согласие на обработку ПД. Во вторых получается, что по идентификатору можно получить ПД других пользователей (понятно, что GUID подобрать практически невозможно, но сам факт огорчает).

В общем как-то так. Желаю разработчикам исправить баги и провести нормальное тестирование. Пока выглядит печально — федеральные сайты типа госуслуг и РЖД сделаны на отлично, а вот там, где работают регионалы сразу сказывается недостаток финансирования.

Эдак у нас киберпанк наступит раньше, чем ожидалось — хакеры будут на чёрном рынке распространять нелегальные приложения, генерирующие qr-коды для обмана патрульных. Сделать его будет довольно несложно, т.к. никаких технических и криптографических средств не защиты не используется, правовые аспекты использования цифровых средств идентификации личности без использования ЭЦП неясны, а логика работы построена исключительно на добросовестности пользователей.

© Habrahabr.ru