Контекст
У меня есть коллекция статических HTML-страниц (~ 10 тыс. страниц), созданных каким-то приложением, над которым я не контролирую. Эти страницы обслуживаются NginX из место расположения
блокировать.
Страницы могут содержать конфиденциальные данные. Я хотел бы иметь возможность блокировать отображение страницы в зависимости от личности пользователя и «флагов» на странице.
Эти флаги могут быть реализованы <meta name=keyword content="flag1 flag2 flagn">
элемент. Когда такой элемент присутствует, следует проверить «учетные данные».
Моя идея состоит в том, чтобы сканировать ответ на запрос, прежде чем он будет возвращен пользователю. Для этого мне нужно
способ передать полный ответ (заголовок + тело) в некоторый пользовательский код, чтобы можно было проанализировать элемент <head>
Если флагов нет, ответ возвращается без изменений.
Если есть флаги и у пользователя нет учетных данных, его просят идентифицировать себя
Если есть флаги и пользователь имеет право на просмотр, ответ возвращается без изменений.
Если есть флаги и пользователь не имеет прав на просмотр, вместо ответа возвращается страница с ошибкой
В конце концов, флаг <meta>
элемент стирается, чтобы избежать утечки подсказок фильтра.
некоторый способ передать этому коду пользователя информацию о текущих учетных данных (имя пользователя, значение запроса, любую полезную информацию, такую как отметка времени идентификации, …)
Пользовательский код будет полагаться на «базу данных» (этот термин не обязательно подразумевает использование настоящего механизма БД), содержащей пользовательские привилегии и реализующую функцию тайм-аута.
Можно ли реализовать пользовательский код в виде сценария FastCGI? Если да, то каковы директивы для передачи полного ответа?
Предварительные испытания
В настоящее время идентификация пользователя не может быть условной: когда auth_basic
включен в место расположения
, пользователи должны идентифицировать себя даже для доступа к общедоступным страницам. Я могу смягчить это, используя гостевой/гостевой пользователь/пароль, но я не могу иметь страницу с предупреждением перед запросом учетных данных.
Таким образом, аутентификация всегда требуется. После этого Авторизация: базовая some_hash
заголовок отправляется вместе с запросом. Этот хэш должен быть захвачен при аутентификации для будущего доступа к свойствам привилегий пользователей.
Как мне это сделать?
Я знаю, что в нынешнем состоянии эта спецификация вообще не обеспечивает реальной безопасности (в том числе уязвима для повторных атак). Я хочу создать доказательство концепции, прежде чем идти дальше. Имеет ли смысл моя цель?
Есть ли более простой способ справиться с этим? XSLT? (хотя учетные данные текущего пользователя должны быть введены в шаблоны)