Как разработать безопасный доступ к веб-интерфейсу API для вашего сайта?
Когда мы открываем доступ к веб-интерфейсу API для пользователей, нам необходимо убедиться в том, что каждый вызов API аутентифицирован. Это означает, что пользователь должен быть тем, за кого он себя выдает.
В этой статье мы рассмотрим два распространенных способа:
1. Аутентификация на основе токенов
2. Аутентификация на основе HMAC (Hash-based Message Authentication Code).
На приведенной ниже схеме показано, как они работают.
Аутентификация на основе токенов
Шаг 1 - пользователь вводит свой пароль на клиенте, а тот отправляет его на сервер аутентификации.
Шаг 2 - сервер аутентификации проверяет подлинность учетных данных и генерирует маркер со сроком действия.
Шаги 3 и 4 - теперь клиент может отправлять запросы на доступ к ресурсам сервера с маркером в HTTP-заголовке. Такой доступ будет действителен до истечения срока действия маркера.
На основе HMAC
Этот механизм генерирует код аутентификации сообщения (подпись) с помощью хэш-функции (SHA256 или MD5).
Шаги 1 и 2 - сервер генерирует два ключа, один из которых - Public APP ID (открытый ключ), а другой - API Key (закрытый ключ).
Шаг 3 - теперь мы генерируем HMAC-подпись на стороне клиента (hmac A). Эта подпись формируется с помощью набора атрибутов, перечисленных на схеме.
Шаг 4 - клиент отправляет запросы на доступ к ресурсам сервера с hmac A в HTTP-заголовке.
Шаг 5. Сервер получает запрос, содержащий данные запроса и заголовок аутентификации. Он извлекает из запроса необходимые атрибуты и использует ключ API, хранящийся на стороне сервера, для генерации подписи (hmac B).
Шаги 6 и 7 - сервер сравнивает hmac A (сгенерированный на стороне клиента) и hmac B (сгенерированный на стороне сервера). Если они совпадают, то запрашиваемый ресурс возвращается клиенту.
Когда мы открываем доступ к веб-интерфейсу API для пользователей, нам необходимо убедиться в том, что каждый вызов API аутентифицирован. Это означает, что пользователь должен быть тем, за кого он себя выдает.
В этой статье мы рассмотрим два распространенных способа:
1. Аутентификация на основе токенов
2. Аутентификация на основе HMAC (Hash-based Message Authentication Code).
На приведенной ниже схеме показано, как они работают.
Аутентификация на основе токенов
Шаг 1 - пользователь вводит свой пароль на клиенте, а тот отправляет его на сервер аутентификации.
Шаг 2 - сервер аутентификации проверяет подлинность учетных данных и генерирует маркер со сроком действия.
Шаги 3 и 4 - теперь клиент может отправлять запросы на доступ к ресурсам сервера с маркером в HTTP-заголовке. Такой доступ будет действителен до истечения срока действия маркера.
На основе HMAC
Этот механизм генерирует код аутентификации сообщения (подпись) с помощью хэш-функции (SHA256 или MD5).
Шаги 1 и 2 - сервер генерирует два ключа, один из которых - Public APP ID (открытый ключ), а другой - API Key (закрытый ключ).
Шаг 3 - теперь мы генерируем HMAC-подпись на стороне клиента (hmac A). Эта подпись формируется с помощью набора атрибутов, перечисленных на схеме.
Шаг 4 - клиент отправляет запросы на доступ к ресурсам сервера с hmac A в HTTP-заголовке.
Шаг 5. Сервер получает запрос, содержащий данные запроса и заголовок аутентификации. Он извлекает из запроса необходимые атрибуты и использует ключ API, хранящийся на стороне сервера, для генерации подписи (hmac B).
Шаги 6 и 7 - сервер сравнивает hmac A (сгенерированный на стороне клиента) и hmac B (сгенерированный на стороне сервера). Если они совпадают, то запрашиваемый ресурс возвращается клиенту.
👍3
Шпаргалка по командам #Linux awk.
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/
https://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/
👍2
Верите ли вы, что Google, Meta, Uber, Twitter и Airbnb размещают почти весь свой код в одном репозитории?
Такая практика называется монорепо.
Монорепо против микрорепо. Что лучше? Почему разные компании выбирают разные варианты?
Монорепо - не новинка; и Linux, и Windows были созданы с использованием монорепо. Для повышения масштабируемости и скорости сборки компания Google разработала свой внутренний специализированный инструментарий для более быстрого масштабирования и строгие стандарты качества кодирования для обеспечения единообразия.
Amazon и Netflix являются основными распространителями философии микросервисов. Такой подход естественным образом разделяет код сервисов на отдельные репозитории. Он быстрее масштабируется, но впоследствии может привести к возникновению болевых точек в управлении.
В Monorepo каждый сервис - это папка, а каждая папка имеет конфигурацию BUILD и контроль прав OWNERS. Каждый член службы отвечает за свою папку.
С другой стороны, в Microrepo каждый сервис отвечает за свой репозиторий, при этом конфигурация сборки и права доступа обычно устанавливаются для всего репозитория.
В Monorepo зависимости являются общими для всей кодовой базы, независимо от ее назначения, поэтому при обновлении версии каждая кодовая база обновляет свою версию.
В Microrepo зависимости контролируются внутри каждого репозитория. Предприятия сами выбирают, когда им обновлять свои версии, исходя из собственного расписания.
Microrepo может либо установить свой собственный стандарт, либо принять общий стандарт, включив в него лучшие практики.
Инженеры Google создали Bazel, а Meta - Buck. Существуют и другие инструменты с открытым исходным кодом, в том числе Nix, Lerna и другие.
С годами у Microrepo появилось больше поддерживаемых инструментов, в том числе Maven и Gradle для Java, NPM для NodeJS, CMake для C/C++ и другие.
Такая практика называется монорепо.
Монорепо против микрорепо. Что лучше? Почему разные компании выбирают разные варианты?
Монорепо - не новинка; и Linux, и Windows были созданы с использованием монорепо. Для повышения масштабируемости и скорости сборки компания Google разработала свой внутренний специализированный инструментарий для более быстрого масштабирования и строгие стандарты качества кодирования для обеспечения единообразия.
Amazon и Netflix являются основными распространителями философии микросервисов. Такой подход естественным образом разделяет код сервисов на отдельные репозитории. Он быстрее масштабируется, но впоследствии может привести к возникновению болевых точек в управлении.
В Monorepo каждый сервис - это папка, а каждая папка имеет конфигурацию BUILD и контроль прав OWNERS. Каждый член службы отвечает за свою папку.
С другой стороны, в Microrepo каждый сервис отвечает за свой репозиторий, при этом конфигурация сборки и права доступа обычно устанавливаются для всего репозитория.
В Monorepo зависимости являются общими для всей кодовой базы, независимо от ее назначения, поэтому при обновлении версии каждая кодовая база обновляет свою версию.
В Microrepo зависимости контролируются внутри каждого репозитория. Предприятия сами выбирают, когда им обновлять свои версии, исходя из собственного расписания.
Microrepo может либо установить свой собственный стандарт, либо принять общий стандарт, включив в него лучшие практики.
Инженеры Google создали Bazel, а Meta - Buck. Существуют и другие инструменты с открытым исходным кодом, в том числе Nix, Lerna и другие.
С годами у Microrepo появилось больше поддерживаемых инструментов, в том числе Maven и Gradle для Java, NPM для NodeJS, CMake для C/C++ и другие.
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Как работают языки C++, Java, Python?
На схеме показано, как происходит компиляция и выполнение.
Компилируемые языки компилируются в машинный код компилятором. В дальнейшем машинный код может быть исполнен непосредственно процессором. Примеры: C, C++, Go.
В байткодовых языках, таких как Java, сначала компилируется исходный код в байткод, а затем JVM выполняет программу. Иногда компилятор JIT (Just-In-Time) компилирует исходный код в машинный код, чтобы ускорить его выполнение. Примеры: Java, C#
Интерпретируемые языки не компилируются. Они интерпретируются интерпретатором во время выполнения программы. Примеры: Python, Javascript, Ruby.
Компилируемые языки в целом работают быстрее интерпретируемых.
На схеме показано, как происходит компиляция и выполнение.
Компилируемые языки компилируются в машинный код компилятором. В дальнейшем машинный код может быть исполнен непосредственно процессором. Примеры: C, C++, Go.
В байткодовых языках, таких как Java, сначала компилируется исходный код в байткод, а затем JVM выполняет программу. Иногда компилятор JIT (Just-In-Time) компилирует исходный код в машинный код, чтобы ускорить его выполнение. Примеры: Java, C#
Интерпретируемые языки не компилируются. Они интерпретируются интерпретатором во время выполнения программы. Примеры: Python, Javascript, Ruby.
Компилируемые языки в целом работают быстрее интерпретируемых.
👍5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Разберитесь с селекторами n-го дочернего элемента с помощью этой шпаргалки CSS
Хранение паролей в базе данных открытым текстом - не самая лучшая идея.
Любой человек, имеющий внутренний доступ к базе данных, может их увидеть и получить.
Кроме того, хэширование паролей и хранение хэш-значений недостаточно, поскольку они могут быть взломаны.
Стандартным решением для защиты от таких атак является использование соли.
Соль - это случайно сгенерированная уникальная строка, которая добавляется к каждому паролю в процессе хэширования.
Выше приведен процесс хранения и проверки пароля с использованием соли:
1. Соль хранится в базе данных в виде обычного текста, что обеспечивает уникальность результата хэширования для каждого пароля.
2. Пароли хранятся в базе данных, хэшируются с помощью соли.
3. Клиент вводит свой пароль.
4. Система считывает соль из базы данных
5. Система комбинирует соль с паролем и хэширует его
6. Система сравнивает вычисленные значения хэша с теми, что хранятся в базе данных. Если они равны, то пароль действителен.
Любой человек, имеющий внутренний доступ к базе данных, может их увидеть и получить.
Кроме того, хэширование паролей и хранение хэш-значений недостаточно, поскольку они могут быть взломаны.
Стандартным решением для защиты от таких атак является использование соли.
Соль - это случайно сгенерированная уникальная строка, которая добавляется к каждому паролю в процессе хэширования.
Выше приведен процесс хранения и проверки пароля с использованием соли:
1. Соль хранится в базе данных в виде обычного текста, что обеспечивает уникальность результата хэширования для каждого пароля.
2. Пароли хранятся в базе данных, хэшируются с помощью соли.
3. Клиент вводит свой пароль.
4. Система считывает соль из базы данных
5. Система комбинирует соль с паролем и хэширует его
6. Система сравнивает вычисленные значения хэша с теми, что хранятся в базе данных. Если они равны, то пароль действителен.
👍5
Классические уравнения и диаграммы в машинном обучении
https://github.com/soulmachine/machine-learning-cheat-sheet
https://github.com/soulmachine/machine-learning-cheat-sheet
Экосистема инструментов Kubernetes.
Kubernetes, ведущая платформа для оркестровки контейнеров, обладает обширной экосистемой инструментов и компонентов, которые в совокупности позволяют организациям эффективно развертывать, управлять и масштабировать контейнерные приложения.
Специалисты по Kubernetes должны хорошо разбираться в этих инструментах, чтобы обеспечить надежность, безопасность и производительность контейнерных приложений в кластерах Kubernetes.
Чтобы представить целостную картину экосистемы Kubernetes, мы создали иллюстрацию, охватывающую следующие аспекты:
1. Безопасность
2. Сетевое взаимодействие
3. Время выполнения контейнера
4. Управление кластерами
5. Мониторинг и наблюдаемость
6. Оркестровка инфраструктуры
Kubernetes, ведущая платформа для оркестровки контейнеров, обладает обширной экосистемой инструментов и компонентов, которые в совокупности позволяют организациям эффективно развертывать, управлять и масштабировать контейнерные приложения.
Специалисты по Kubernetes должны хорошо разбираться в этих инструментах, чтобы обеспечить надежность, безопасность и производительность контейнерных приложений в кластерах Kubernetes.
Чтобы представить целостную картину экосистемы Kubernetes, мы создали иллюстрацию, охватывающую следующие аспекты:
1. Безопасность
2. Сетевое взаимодействие
3. Время выполнения контейнера
4. Управление кластерами
5. Мониторинг и наблюдаемость
6. Оркестровка инфраструктуры
👍7
Шпаргалка по команде less: Краткое справочное руководств
https://linuxopsys.com/topics/less-command-cheat-sheet
https://linuxopsys.com/topics/less-command-cheat-sheet
This media is not supported in your browser
VIEW IN TELEGRAM
Поймите разницу между drop и box shadow.
😱4
This media is not supported in your browser
VIEW IN TELEGRAM
Маршрутизация файловой системы Next.js
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
1. HTTP (HyperText Transfer Protocol)
HTTP - это протокол для получения ресурсов, таких как HTML-документы. Он является основой любого обмена данными в Web и представляет собой клиент-серверный протокол.
2. HTTP/3
HTTP/3 - это следующая крупная ревизия HTTP. Он работает на основе QUIC - нового транспортного протокола, предназначенного для использования в Интернете с высокой мобильностью. Он использует UDP вместо TCP, что обеспечивает более быстрый отклик веб-страниц. Приложениям виртуальной реальности требуется большая пропускная способность для визуализации сложных деталей виртуальной сцены, поэтому переход на HTTP/3 на базе QUIC, вероятно, будет полезен.
3. HTTPS (HyperText Transfer Protocol Secure)
HTTPS является расширением HTTP и использует шифрование для обеспечения безопасности связи.
4. WebSocket
WebSocket - это протокол, обеспечивающий полнодуплексную связь по протоколу TCP. Клиенты устанавливают WebSocket для получения обновлений в реальном времени от внутренних служб. В отличие от REST, который всегда "тянет" данные, WebSocket позволяет "подталкивать" их.
5. TCP (Transmission Control Protocol)
Протокол TCP предназначен для передачи пакетов через Интернет и обеспечения успешной доставки данных и сообщений по сетям. Многие протоколы прикладного уровня строятся на базе TCP.
6. UDP (User Datagram Protocol)
UDP посылает пакеты непосредственно на целевой компьютер, не устанавливая сначала соединения. UDP широко используется в чувствительных ко времени коммуникациях, где время от времени отбрасывать пакеты лучше, чем ждать. По этому протоколу часто передается голосовой и видеотрафик.
7. SMTP (Simple Mail Transfer Protocol)
SMTP - это стандартный протокол для передачи электронной почты от одного пользователя к другому.
8. FTP (File Transfer Protocol)
FTP используется для передачи компьютерных файлов между клиентом и сервером. Он имеет отдельные соединения для канала управления и канала данных.
HTTP - это протокол для получения ресурсов, таких как HTML-документы. Он является основой любого обмена данными в Web и представляет собой клиент-серверный протокол.
2. HTTP/3
HTTP/3 - это следующая крупная ревизия HTTP. Он работает на основе QUIC - нового транспортного протокола, предназначенного для использования в Интернете с высокой мобильностью. Он использует UDP вместо TCP, что обеспечивает более быстрый отклик веб-страниц. Приложениям виртуальной реальности требуется большая пропускная способность для визуализации сложных деталей виртуальной сцены, поэтому переход на HTTP/3 на базе QUIC, вероятно, будет полезен.
3. HTTPS (HyperText Transfer Protocol Secure)
HTTPS является расширением HTTP и использует шифрование для обеспечения безопасности связи.
4. WebSocket
WebSocket - это протокол, обеспечивающий полнодуплексную связь по протоколу TCP. Клиенты устанавливают WebSocket для получения обновлений в реальном времени от внутренних служб. В отличие от REST, который всегда "тянет" данные, WebSocket позволяет "подталкивать" их.
5. TCP (Transmission Control Protocol)
Протокол TCP предназначен для передачи пакетов через Интернет и обеспечения успешной доставки данных и сообщений по сетям. Многие протоколы прикладного уровня строятся на базе TCP.
6. UDP (User Datagram Protocol)
UDP посылает пакеты непосредственно на целевой компьютер, не устанавливая сначала соединения. UDP широко используется в чувствительных ко времени коммуникациях, где время от времени отбрасывать пакеты лучше, чем ждать. По этому протоколу часто передается голосовой и видеотрафик.
7. SMTP (Simple Mail Transfer Protocol)
SMTP - это стандартный протокол для передачи электронной почты от одного пользователя к другому.
8. FTP (File Transfer Protocol)
FTP используется для передачи компьютерных файлов между клиентом и сервером. Он имеет отдельные соединения для канала управления и канала данных.
❤🔥3👍1
Python List Methods
https://www.freecodecamp.org/news/python-list-methods-explained-in-plain-english/
https://www.freecodecamp.org/news/python-list-methods-explained-in-plain-english/
👍4
Наиболее полная схема нейронных сетей, объяснение
https://towardsdatascience.com/the-mostly-complete-chart-of-neural-networks-explained-3fb6f2367464
https://towardsdatascience.com/the-mostly-complete-chart-of-neural-networks-explained-3fb6f2367464