Добавлял тут в pgSCV поддержку basic auth и TLS. И прям неожиданно свалилась прекрасная статья о том как это делать правильно.
Оказывается есть нюансы, от очевидных до не очень.
Во-первых нет смысла использовать basic auth без TLS. Оно и понятно, креды кодируются base64 и передаются в HTTP заголовке - такое я перехватывал еще Каином в незапамятные "двухтыщные", чувствуя себя кул-хацкером.
Во-вторых, менее очевидное, но вполне логичное это тайминговые атаки на авторизацию. Суть коротко в том что сверка секрета и пришедшей строки, делается сервером посимвольно, и при генерации тонн запрсов на авторизацию, на основе времени ответа можно со временем вычислить пароль. В целом для pgSCV это не так важно (пожалуй метрики не столь важная и секретная инфа чтобы так заморачиваться с безопасностью), но для приложений где есть доступ к более чувствительно инфе, это стоит предусмотреть.
В-третьих (не совсем относится к авторизации), узнал про mkcert, небльшую тулзу с помощью которой в пару команд можно запилить локальный CA и выпускать свои сертификаты.
Вобщем годная статья, сохранил сюда.
Оказывается есть нюансы, от очевидных до не очень.
Во-первых нет смысла использовать basic auth без TLS. Оно и понятно, креды кодируются base64 и передаются в HTTP заголовке - такое я перехватывал еще Каином в незапамятные "двухтыщные", чувствуя себя кул-хацкером.
Во-вторых, менее очевидное, но вполне логичное это тайминговые атаки на авторизацию. Суть коротко в том что сверка секрета и пришедшей строки, делается сервером посимвольно, и при генерации тонн запрсов на авторизацию, на основе времени ответа можно со временем вычислить пароль. В целом для pgSCV это не так важно (пожалуй метрики не столь важная и секретная инфа чтобы так заморачиваться с безопасностью), но для приложений где есть доступ к более чувствительно инфе, это стоит предусмотреть.
В-третьих (не совсем относится к авторизации), узнал про mkcert, небльшую тулзу с помощью которой в пару команд можно запилить локальный CA и выпускать свои сертификаты.
Вобщем годная статья, сохранил сюда.