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

Решите, на какой вопрос отвечает разрешение

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

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

Ограничьте запрос на сервере

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

Затем проверьте, что портал и сервис видят один и тот же источник. Разделённый туннель, один переход через прокси и IPv4 против IPv6 могут дать двум назначениям два разных адреса, поэтому разрешение, активированное одним путём, может не покрыть следующий запрос.

Покажите разрешение до установки

Открытие ссылки должно показывать предлагаемый сервис, наблюдаемый источник и длительность, но пока ничего не менять. Этот один шаг превращает ссылку из письма из действия в предложение и не даёт боту предпросмотра или почтовому сканеру выдать доступ просто загрузив её.

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

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

Адрес общий даже тогда, когда разрешение действует

Офисный NAT, операторский NAT и общий выход VPN ставят каждый нескольких человек за один адрес. Допустить этот адрес — значит допустить всех, кто за ним — насколько это касается следующей границы сервиса —, при этом ничего не доказывая о том, у кого та учётная запись, которую ожидает сервис.

Удаление правила тоже не универсальное отключение. Установленные соединения, кэшированные токены приложений и долгоживущие сессии могут пережить правило на минуты или гораздо дольше, поэтому выбранный срок жизни должен отражать то, что сервис делает после допуска, а не только сколько существует правило.

Проверьте четыре случая и оба семейства адресов

Разрешение хорошо настолько, насколько оно выдерживает четыре случая: новый разрешённый запрос, неодобренный запрашивающий, повтор той же ссылки и тот же запрос после истечения срока.

Затем проверьте каждое семейство отдельно, потому что адрес источника, который наблюдает сервис, может различаться между ними.

dig +short A service.example.com
dig +short AAAA service.example.com
curl -4 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com
curl -6 -sS -o /dev/null -w "%{http_code}\n" https://service.example.com

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

Похожие статьи