Лакируйте S3-подобный подписанный ограниченный по времени запрос перед доставкой объектов в VCL

Этот вопрос может показаться немного странным, но возможно ли с помощью решения для плохого человека в VCL выполнить синтаксический анализ подписанного запроса (с общим секретным ключом, также известного как решение HMAC для плохого человека), созданного реферером (основным) сайт, и обслуживать контент с лаком только в том случае, если подпись верна, а отметка времени (подписи) еще не истекла?

Таким образом, аналогично тому, как работает Amazon S3, вы можете легко создать временный URL-адрес со знаком для вашего S3-объекта, срок действия которого истекает через определенное количество секунд.

Примечание: я говорю не об истечении срока действия объекта кэша, а об истечении срока действия URL для клиента.

Это удобно, когда вы хотите выдавать временные URL-адреса только своим пользователям, чтобы предотвратить долгосрочную горячую ссылку без проверки заголовка реферера.

Итак - плохое решение временных URL-адресов в VCL (предпочтительно в vcl_recv), заставляющее устаревать внутренний объект). Это возможно без создания VMOD?

Редактировать:

Я нашел другой способ авторизации контента с помощью Varnish:

http://monolight.cc/2011/04/content-authorization-with-varnish/

Но это все еще не то, чего я хочу достичь.

С наилучшими пожеланиями!

2 ответа

Решение

Да, это возможно.

По сути, вам необходимо проверить подпись (дайджест vmod), выбрать метку времени из любого заголовка, в котором она находится (regsub), и сравнить ее с текущим временем.

использование std.integer() чтобы поставить метку времени:

https://www.varnish-cache.org/docs/trunk/reference/vmod_std.html#integer

использовать встроенный now переменная в VCL, чтобы найти текущую метку времени. Вы можете захотеть сделать (now + 0s) чтобы заставить Varnish дать вам метку времени Unix.

https://www.varnish-cache.org/docs/trunk/reference/vcl.html#variables

Дайджест vmod находится на github:

https://github.com/varnish/libvmod-digest

Для этого уже есть VMOD, если это поможет?

Модуль безопасной загрузки лака

Другие вопросы по тегам