Двухфакторная аутентификация.

Двухфакторная аутентификация в Nano-CMS.

Из документа про способы авторизации стало ясно, что входить в админку Наны можно по логину и паролю, которые поддаются шифрованию перед отправкой, а также токену или файлу-ключу. Способы на любой вкус.

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

Об уязвимости методов авторизации к перехвату:

Если не тешить себя глупой надеждой, что https протокол надёжно шифрует передаваемые данные (если он вообще поднят на сайте), то и логин с паролем, и файл-ключ передаются в явном виде, и могут быть перехвачены. А потом использованы кем угодно и когда угодно.

Наилучшим вариантом будет авторизация по токену, так как пара кодов пароль-отзыв никогда не повторяется. Но, опять-таки, при утере токена (чего можно и не заметить) этот метод доступа компрометируется.

В Нано-CMS можно включить параноидальный режим авторизации, когда вслед за выбранным способом следует дополнительный этап обмена одноразовым паролем, с участием админского e-mail. Поскольку админский e-mail находится в ведении главного Администратора, двухфакторную аутентификацию можно применять только в случае единственного Администратора у сайта.

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

Как включить двухфакторную аутентификацию?

В файле настроек всего 4 или 5 строчек конфигурации.
Вспомним их:

   'login'     => array(
      
'method' => 'passw',     # passw|crypt|token|key
      
'steps'  => 1,           # 1|2 # одно/двух-факторная аутентификация.
      
'symbol' => 'a-z0-9A-Z'# Разрешённые символы логина и пароля.
      
'timer'  => 24,          # Максимальное время авторизации, в часах.
      
'brutt'  => 3,           # max. число неудач при авторизации.

Строчка 'steps' => ... может отсутствовать.
Когда её нет вообще, авторизация однофакторная.
Когда она вписана, как указано, авторизация также однофакторная.

Можно догадаться, что вот такая форма записи указанной строчки как раз и разрешает двухфакторную аутентификацию, когда сначала применяется метод авторизации, выбранный строчкой выше, а затем вторым этапом предпринимается e-mail авторизация:

   'login'     => array(
      
'method' => 'passw',     # passw|crypt|token|key
      
'steps'  => 2,           # 1|2 # одно/двух-факторная аутентификация.
      
'symbol' => 'a-z0-9A-Z'# Разрешённые символы логина и пароля.
      
'timer'  => 24,          # Максимальное время авторизации, в часах.
      
'brutt'  => 3,           # max. число неудач при авторизации.

Порядок аторизации через e-mail Администратора:

После того, как аторизация одним из трёх основных способов успешно пройдена, система авторизации отправляет письмо с кодом на e-mail Администратора, и предъявляет форму для ввода этого кода доступа:

Двухэтапная аутентификация:

Письмо с кодом доступа выслано на админский e-mail.
Этот код следует внести в форму, и отправить её:


Укажите код доступа:

Само письмо, кроме собственно кода доступа, на всякий случай фиксирует место и время попытки авторизации:

Доступ к админке сайта site.com:

Ваш код авторизации: oreped7d8b5c2e6d1b56er8f384ac27a

IP: 101.102.103.104
Date: 16.10.2018 02:37:34
SendPage: http://site.com/admin/login.htm

Что делать, понятно - код доступа берётся из письма, помещается в форму сайта, и нажимается кнопка отправки формы.

Обратите внимание, что, как и в прочих вариантах авторизации, на взаимодействие с формой даётся всего одна минута, по истечении которой код доступа утрачивает силу, а сама форма физически откажется что-либо принимать (прямо на кнопке отправки формы идёт обратный отсчёт, а потом кнопка блокируется, и ни на что не реагирует).

Поэтому перед запуском процедуры авторизации в админке Наны по двухфакторному алгоритму предварительно активируйте e-mail клиент или web-интерфейс почтового сервиса.

Ещё больше паранойи:

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

Стандартно файл живет по пути ./data/content/admin/login.php
Шаблон письма в нём выглядит так:

   $_s['template']['authentication_letter']='

<div style="text-indent:1em;margin:10px;font-family:verdana,arial,sans-serif;font-size:16px;font-weight:normal;">
   <br>Доступ к админке сайта '
.$_s['loc']['host'].':
   <br>
   <br>Ваш код авторизации: <font color="red">===code===</font>
   <br>
   <br>IP: '
.$_s['ip'].'
   <br>Date: '
.date('d.m.Y H:i:s',$_s['unix']).'
   <br>SendPage: <a href="'
.$_s['loc']['here'].'" >'.$_s['loc']['here'].'</a>
</div>
<hr>'
;