Шпаргалки для айтишников
877 subscribers
297 photos
19 videos
19 files
129 links
В данной группе постоянно выкладываются шпаргалки и руководства для системных администраторов, программистов, специалистов по безопасности и т.п.

По всем вопросам: @un_ixtime
加入频道
Как разработать безопасный доступ к веб-интерфейсу 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 (сгенерированный на стороне сервера). Если они совпадают, то запрашиваемый ресурс возвращается клиенту.
👍3
Верите ли вы, что 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++ и другие.
👍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.

Компилируемые языки в целом работают быстрее интерпретируемых.
👍5🔥1
Шпаргалка по правам доступа к файлам в Linux (разрешения SUID, SGID и Stick Bit):
5
This media is not supported in your browser
VIEW IN TELEGRAM
Разберитесь с селекторами n-го дочернего элемента с помощью этой шпаргалки CSS
Хранение паролей в базе данных открытым текстом - не самая лучшая идея.

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

Кроме того, хэширование паролей и хранение хэш-значений недостаточно, поскольку они могут быть взломаны.

Стандартным решением для защиты от таких атак является использование соли.

Соль - это случайно сгенерированная уникальная строка, которая добавляется к каждому паролю в процессе хэширования.
Выше приведен процесс хранения и проверки пароля с использованием соли:

1. Соль хранится в базе данных в виде обычного текста, что обеспечивает уникальность результата хэширования для каждого пароля.

2. Пароли хранятся в базе данных, хэшируются с помощью соли.

3. Клиент вводит свой пароль.

4. Система считывает соль из базы данных

5. Система комбинирует соль с паролем и хэширует его

6. Система сравнивает вычисленные значения хэша с теми, что хранятся в базе данных. Если они равны, то пароль действителен.
👍5
Шпаргалка по команде Curl
👍5
Классические уравнения и диаграммы в машинном обучении

https://github.com/soulmachine/machine-learning-cheat-sheet
Экосистема инструментов Kubernetes.

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

Специалисты по Kubernetes должны хорошо разбираться в этих инструментах, чтобы обеспечить надежность, безопасность и производительность контейнерных приложений в кластерах Kubernetes.

Чтобы представить целостную картину экосистемы Kubernetes, мы создали иллюстрацию, охватывающую следующие аспекты:

1. Безопасность
2. Сетевое взаимодействие
3. Время выполнения контейнера
4. Управление кластерами
5. Мониторинг и наблюдаемость
6. Оркестровка инфраструктуры
👍7
SSH Linux команды
2
Шпаргалка по команде less: Краткое справочное руководств

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
Объяснение кодов состояния HTTP
😱1
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 используется для передачи компьютерных файлов между клиентом и сервером. Он имеет отдельные соединения для канала управления и канала данных.
❤‍🔥3👍1
Наиболее полная схема нейронных сетей, объяснение

https://towardsdatascience.com/the-mostly-complete-chart-of-neural-networks-explained-3fb6f2367464