Query Optimization Techniques .pdf
148.7 KB
10 рекомендаций по оптимизации SQL-запросов
Любая база данных позволяет извлекать информацию с помощью SQL-команд. Но если вы когда-либо работали с базами данных для получения информации, вы сталкивались с медленными запросами
Иногда причиной может быть нагрузка на систему, но чаще проблема заключается в не очень эффективном написании запроса
Несколько способов оптимизации SQL:
1. Используйте имена столбцов вместо символа * в инструкции SELECT
2. Избегайте использования предложения HAVING в SQL-запросах
3. Исключайте ненужные условия в предложении WHERE
4. Избегайте вложенных подзапросов
5. Рассмотрите возможность использования предиката IN при запросе к индексированному столбцу
6. Используйте EXISTS вместо DELETE при работе с объединениями таблиц, которые включают таблицы с отношениями «один ко многим»
7. Старайтесь использовать UNION ALL вместо UNION
8. Избегайте использования оператора OR в условиях соединения
9. Избегайте функций в правой части оператора
10. Удалите все избыточные вычисления
Любая база данных позволяет извлекать информацию с помощью SQL-команд. Но если вы когда-либо работали с базами данных для получения информации, вы сталкивались с медленными запросами
Иногда причиной может быть нагрузка на систему, но чаще проблема заключается в не очень эффективном написании запроса
Несколько способов оптимизации SQL:
1. Используйте имена столбцов вместо символа * в инструкции SELECT
2. Избегайте использования предложения HAVING в SQL-запросах
3. Исключайте ненужные условия в предложении WHERE
4. Избегайте вложенных подзапросов
5. Рассмотрите возможность использования предиката IN при запросе к индексированному столбцу
6. Используйте EXISTS вместо DELETE при работе с объединениями таблиц, которые включают таблицы с отношениями «один ко многим»
7. Старайтесь использовать UNION ALL вместо UNION
8. Избегайте использования оператора OR в условиях соединения
9. Избегайте функций в правой части оператора
10. Удалите все избыточные вычисления
👍17🤔9❤2
Компания JetBrains изменила политику распространения среды IntelliJ IDEA: начиная с версии 2025.3, IntelliJ IDEA будет распространяться в виде единого дистрибутива, вместо отдельных версий Community и Ultimate.
Теперь будет доступен только один установщик IntelliJ IDEA, который заменит отдельные дистрибутивы для Community Edition и Ultimate Edition. В новой схеме распространения IntelliJ IDEA все функции Ultimate по-прежнему будут требовать подписку для их активации. Однако, как обещает JetBrains, даже без подписки среда разработки останется полностью функциональной, бесплатной как для коммерческого, так и для некоммерческого использования, и будет включать больше возможностей, чем когда-либо предлагала версия Community Edition.
Если вы сейчас используете Community Edition, ваша среда разработки автоматически обновится до единого дистрибутива через стандартный механизм патч-обновлений. Вы получите доступ к дополнительным функциям бесплатно и более целостный пользовательский опыт. Кроме того, вы сможете попробовать функции Ultimate в один клик.
Для пользователей Ultimate изменения минимальны: среда разработки будет называться просто IntelliJ IDEA, без суффикса «Ultimate».
https://blog.jetbrains.com/idea/2025/07/intellij-idea-unified-distribution-plan/
Теперь будет доступен только один установщик IntelliJ IDEA, который заменит отдельные дистрибутивы для Community Edition и Ultimate Edition. В новой схеме распространения IntelliJ IDEA все функции Ultimate по-прежнему будут требовать подписку для их активации. Однако, как обещает JetBrains, даже без подписки среда разработки останется полностью функциональной, бесплатной как для коммерческого, так и для некоммерческого использования, и будет включать больше возможностей, чем когда-либо предлагала версия Community Edition.
Если вы сейчас используете Community Edition, ваша среда разработки автоматически обновится до единого дистрибутива через стандартный механизм патч-обновлений. Вы получите доступ к дополнительным функциям бесплатно и более целостный пользовательский опыт. Кроме того, вы сможете попробовать функции Ultimate в один клик.
Для пользователей Ultimate изменения минимальны: среда разработки будет называться просто IntelliJ IDEA, без суффикса «Ultimate».
https://blog.jetbrains.com/idea/2025/07/intellij-idea-unified-distribution-plan/
The JetBrains Blog
IntelliJ IDEA Moves to the Unified Distribution | The IntelliJ IDEA Blog
We are excited to announce the next step for IntelliJ IDEA: we are moving to a single, unified distribution. And yes, before you ask, our commitment to open source remains as strong as ever. There
🔥27👍6❤3
10 важнейших алгоритмов работы с графами: (описание к рисунку из предыдущего поста)
1. Поиск в глубину (Depth First Search, DFS) — алгоритм обхода графа, который максимально глубоко исследует каждую ветвь перед переходом к следующей.
2. Поиск в ширину (Breadth First Search, BFS) — алгоритм обхода графа, который сначала исследует все соседние вершины, прежде чем перейти к вершинам на следующем уровне.
3. Топологическая сортировка (Topological Sort) — алгоритм упорядочивания вершин ориентированного ацикличного графа таким образом, что для каждого ребра (u, v) вершина u предшествует вершине v.
4. Объединение-поиск (Union Find) — структура данных для эффективного управления разбиением множества на непересекающиеся подмножества.
5. Обнаружение циклов (Cycle Detection) — алгоритм для выявления наличия циклов в графе.
6. Связанные компоненты (Connected Components) — алгоритм для нахождения подграфов, где между любыми двумя вершинами существует путь.
7. Двудольные графы (Bipartite Graphs) — графы, вершины которых можно разделить на две независимые группы так, что рёбра соединяют только вершины из разных групп.
8. Заполнение области (Flood Fill) — алгоритм для определения и заполнения связанных областей одинакового цвета или типа.
9. Минимальное остовное дерево (Minimum Spanning Tree) — алгоритм для нахождения подграфа-дерева с минимальным суммарным весом рёбер, включающего все вершины исходного графа.
10. Кратчайший путь (Shortest Path) — алгоритм для нахождения пути минимальной длины между двумя вершинами графа.
1. Поиск в глубину (Depth First Search, DFS) — алгоритм обхода графа, который максимально глубоко исследует каждую ветвь перед переходом к следующей.
2. Поиск в ширину (Breadth First Search, BFS) — алгоритм обхода графа, который сначала исследует все соседние вершины, прежде чем перейти к вершинам на следующем уровне.
3. Топологическая сортировка (Topological Sort) — алгоритм упорядочивания вершин ориентированного ацикличного графа таким образом, что для каждого ребра (u, v) вершина u предшествует вершине v.
4. Объединение-поиск (Union Find) — структура данных для эффективного управления разбиением множества на непересекающиеся подмножества.
5. Обнаружение циклов (Cycle Detection) — алгоритм для выявления наличия циклов в графе.
6. Связанные компоненты (Connected Components) — алгоритм для нахождения подграфов, где между любыми двумя вершинами существует путь.
7. Двудольные графы (Bipartite Graphs) — графы, вершины которых можно разделить на две независимые группы так, что рёбра соединяют только вершины из разных групп.
8. Заполнение области (Flood Fill) — алгоритм для определения и заполнения связанных областей одинакового цвета или типа.
9. Минимальное остовное дерево (Minimum Spanning Tree) — алгоритм для нахождения подграфа-дерева с минимальным суммарным весом рёбер, включающего все вершины исходного графа.
10. Кратчайший путь (Shortest Path) — алгоритм для нахождения пути минимальной длины между двумя вершинами графа.
❤4👍3🔥3🥰1
Количество вакансий для IT-специалистов начало сокращаться впервые за три года
Несмотря на импортозамещение и цифровизацию, число открытых вакансий для разработчиков софта в РФ впервые с 2022 года сократилось и составило, по данным HeadHunter за первое полугодие, 291 тыс. против свыше 300 тыс. год назад. Снижение числа объявлений о вакансиях для IT-специалистов заметили и в других кадровых агентствах.
По данным HeadHunter, на площадке количество размещенных объявлений снизилось за полугодие на 20%, до 220 тыс. вакансий. «Еще в прошлом году на рынке начала формироваться тенденция к сокращению персонала в крупных IT-компаниях, в том числе среди разработчиков, в пользу перераспределения нагрузки у тех, кто остается, и повышения их зарплат»,— говорит представитель HeadHunter. Однако, уточняет он, если на должности младших специалистов наблюдается профицит кадров (11,1 резюме на одну вакансию), то среди высококвалифицированных специалистов (senior) наблюдается дефицит — 2,3 резюме на одну вакансию.
Многие компании начали оптимизацию этого сегмента бизнеса, в том числе посредством сокращения дорогостоящих специалистов, объясняют участники рынка. Параллельно начинается процесс внедрения искусственного интеллекта в IT-сфере, что, по текущим оценкам, способно сэкономить до 30–50% бюджетов. Однако заменить разработчиков высокой квалификации ИИ не в состоянии, по крайней мере пока.
https://www.kommersant.ru/doc/7891622
Несмотря на импортозамещение и цифровизацию, число открытых вакансий для разработчиков софта в РФ впервые с 2022 года сократилось и составило, по данным HeadHunter за первое полугодие, 291 тыс. против свыше 300 тыс. год назад. Снижение числа объявлений о вакансиях для IT-специалистов заметили и в других кадровых агентствах.
По данным HeadHunter, на площадке количество размещенных объявлений снизилось за полугодие на 20%, до 220 тыс. вакансий. «Еще в прошлом году на рынке начала формироваться тенденция к сокращению персонала в крупных IT-компаниях, в том числе среди разработчиков, в пользу перераспределения нагрузки у тех, кто остается, и повышения их зарплат»,— говорит представитель HeadHunter. Однако, уточняет он, если на должности младших специалистов наблюдается профицит кадров (11,1 резюме на одну вакансию), то среди высококвалифицированных специалистов (senior) наблюдается дефицит — 2,3 резюме на одну вакансию.
Многие компании начали оптимизацию этого сегмента бизнеса, в том числе посредством сокращения дорогостоящих специалистов, объясняют участники рынка. Параллельно начинается процесс внедрения искусственного интеллекта в IT-сфере, что, по текущим оценкам, способно сэкономить до 30–50% бюджетов. Однако заменить разработчиков высокой квалификации ИИ не в состоянии, по крайней мере пока.
https://www.kommersant.ru/doc/7891622
Коммерсантъ
Заштатная ситуация
Количество вакансий для IT-специалистов начало сокращаться впервые за три года
😁8👍3🔥2🐳2👎1🤬1
В ГосДуме призвали WhatsApp готовиться к уходу с российского рынка
Первый зампред Госдумы по информполитике Антон Горелкин считает, что мессенджер WhatsApp вскоре может попасть под ограничения.
По словам депутата, мессенджер может войти в список ПО из недружественных стран, который правительство разрабатывает по поручению президента России. Telegram ограничения не коснутся, но регистрация мессенджера на Виргинских островах вызывает вопросы, подчеркнул господин Горелкин.
Сейчас примерно 68% россиян пользуются WhatsApp ежедневно, около 55% заходят в Telegram, рассказал депутат, По его мнению, долю лидера в случае запрета может получить национальный мессенджер Max. Господин Горелкин ожидает, что в нем будут реализованы «уникальные функции».
Накануне Владимир Путин поручил правительству разработать ограничения для ПО, произведенного в недружественных странах. Доклад должен быть готов к 1 сентября.
https://www.kommersant.ru/doc/7897955
Первый зампред Госдумы по информполитике Антон Горелкин считает, что мессенджер WhatsApp вскоре может попасть под ограничения.
По словам депутата, мессенджер может войти в список ПО из недружественных стран, который правительство разрабатывает по поручению президента России. Telegram ограничения не коснутся, но регистрация мессенджера на Виргинских островах вызывает вопросы, подчеркнул господин Горелкин.
Сейчас примерно 68% россиян пользуются WhatsApp ежедневно, около 55% заходят в Telegram, рассказал депутат, По его мнению, долю лидера в случае запрета может получить национальный мессенджер Max. Господин Горелкин ожидает, что в нем будут реализованы «уникальные функции».
Накануне Владимир Путин поручил правительству разработать ограничения для ПО, произведенного в недружественных странах. Доклад должен быть готов к 1 сентября.
https://www.kommersant.ru/doc/7897955
Коммерсантъ
Депутат Горелкин призвал WhatsApp готовиться к уходу с российского рынка
Подробнее на сайте
🤡53👍10🤮7🤬5💩5👏1🥱1
Исследователи из Microsoft изучили, какие профессии больше всего подвержены влиянию генеративного ИИ. Результаты исследования основаны исключительно на использовании Microsoft Copilot в США и могут не распространяться на другие платформы или страны.
Чтобы оценить влияние ИИ на разные профессии, исследователи разработали «показатель применимости ИИ», который учитывает частоту использования, процент успешных решений и то, насколько хорошо ИИ справляется с каждой задачей. Наивысшие баллы получили переводчики, историки, писатели, специалисты в области СМИ, консультанты по работе с клиентами и продавцы. Технические специалисты, такие как программисты ЧПУ и специалисты по обработке данных, также получили высокие оценки.
На другом конце шкалы находятся профессии, требующие физического труда, — сиделки, разнорабочие, уборщики и операторы станков, — на которые современные инструменты генеративного ИИ оказывают незначительное влияние. Исследование показало, что почти нет корреляции между тем, насколько ИИ подходит для той или иной работы, и уровнем заработной платы или образования. Хотя профессии, для которых требуется высшее образование, в меньшей степени подвержены влиянию искусственного интеллекта.
Наиболее распространённые задачи, решаемые с помощью ИИ, связаны со сбором информации, написанием и редактированием текстов, а также передачей идей. В этих областях ИИ показывает наилучшие результаты как с точки зрения удовлетворённости пользователей, так и с точки зрения скорости выполнения задач. Напротив, система менее эффективна при анализе данных или визуальном дизайне, а также с трудом справляется с задачами, требующими взаимодействия с реальным миром или физической работы, например с покупками или ремонтом.
Авторы предостерегают от поспешных выводов о том, что возможности ИИ автоматически приведут к автоматизации или сокращению рабочих мест. Во многих случаях ИИ выступает в роли помощника, поддерживая и улучшая работу людей, а не заменяя её. Они приводят в пример банкоматы в банковской сфере: автоматизация изменила подход к работе, но также создала новые рабочие места в отрасли.
https://the-decoder.com/microsoft-study-shows-these-professions-are-most-affected-by-generative-ai/
Чтобы оценить влияние ИИ на разные профессии, исследователи разработали «показатель применимости ИИ», который учитывает частоту использования, процент успешных решений и то, насколько хорошо ИИ справляется с каждой задачей. Наивысшие баллы получили переводчики, историки, писатели, специалисты в области СМИ, консультанты по работе с клиентами и продавцы. Технические специалисты, такие как программисты ЧПУ и специалисты по обработке данных, также получили высокие оценки.
На другом конце шкалы находятся профессии, требующие физического труда, — сиделки, разнорабочие, уборщики и операторы станков, — на которые современные инструменты генеративного ИИ оказывают незначительное влияние. Исследование показало, что почти нет корреляции между тем, насколько ИИ подходит для той или иной работы, и уровнем заработной платы или образования. Хотя профессии, для которых требуется высшее образование, в меньшей степени подвержены влиянию искусственного интеллекта.
Наиболее распространённые задачи, решаемые с помощью ИИ, связаны со сбором информации, написанием и редактированием текстов, а также передачей идей. В этих областях ИИ показывает наилучшие результаты как с точки зрения удовлетворённости пользователей, так и с точки зрения скорости выполнения задач. Напротив, система менее эффективна при анализе данных или визуальном дизайне, а также с трудом справляется с задачами, требующими взаимодействия с реальным миром или физической работы, например с покупками или ремонтом.
Авторы предостерегают от поспешных выводов о том, что возможности ИИ автоматически приведут к автоматизации или сокращению рабочих мест. Во многих случаях ИИ выступает в роли помощника, поддерживая и улучшая работу людей, а не заменяя её. Они приводят в пример банкоматы в банковской сфере: автоматизация изменила подход к работе, но также создала новые рабочие места в отрасли.
https://the-decoder.com/microsoft-study-shows-these-professions-are-most-affected-by-generative-ai/
THE DECODER
Microsoft researchers studied which professions are most affected by generative AI
A new Microsoft Research study finds that knowledge work, communication, and sales jobs are among the professions most likely to be affected by generative AI.
👍8😁5🤮4🫡3
Как работает MongoDB (описание к рисунку из предыдущего поста)
MongoDB была создана из необходимости: основатели столкнулись с проблемами при разработке масштабных веб-приложений с использованием существующих баз данных.
С ростом интернета, появлением всё более динамичных веб-сайтов и приложений, старые инструменты баз данных не справлялись с нагрузкой. MongoDB была разработана для заполнения этого пробела. Она предложила разработчикам гибкость, масштабируемость и простоту использования, необходимые для нового веба.
MongoDB в основном написана на C++, но использует JavaScript для своей оболочки и Python для некоторых инструментов и драйверов. В то время как традиционные реляционные базы данных хранят данные в таблицах и строках, MongoDB, по своей сути, — это NoSQL, документоориентированная база данных.
Но MongoDB:
* хранит данные во внутреннем бинарном формате, называемом BSON (Binary JSON).
* BSON — это расширенный набор JSON.
* Он может представлять всё, что может JSON, плюс дополнительные типы данных, такие как даты и двоичные данные.
* BSON более компактен, чем JSON, что уменьшает объём памяти и повышает производительность.
* Такая структура позволяет более естественно представлять реальные объекты и связи между ними.
Архитектура MongoDB
1. Document Model — гибкая модель хранения данных в формате JSON, позволяющая использовать различные структуры и вложенные объекты.
2. Collections — группы документов, аналогичные таблицам, но без строгой схемы, обеспечивающие гибкую организацию.
3. mongod — основной процесс, обрабатывающий хранение, запросы и администрирование.
4. mongos (если используется шардирование) — маршрутизирует запросы в распределённом кластере к правильным разделам данных.
5. Replica Sets — несколько узлов поддерживают копии данных, обеспечивая высокую доступность и отказоустойчивость.
6. Sharding — горизонтальное масштабирование путём распределения данных по нескольким серверам для больших наборов данных и высокой нагрузки.
7. Indexes — структуры данных для ускорения запросов, поддерживающие различные типы для разных шаблонов доступа.
8. WiredTiger — механизм хранения по умолчанию, оптимизированный для использования памяти и диска с контролем параллелизма.
9. Aggregation Framework — мощный конвейерный фреймворк для сложного анализа и преобразования данных.
10. Query Language — выразительный язык для фильтрации, сортировки, проецирования и агрегации данных.
Примеры использования
* Системы управления контентом
* Аналитика в реальном времени
* Интернет вещей (IoT)
* Мобильные приложения
* Каталоги товаров
Проблемы и ограничения
1. Транзакции — использует модель «snapshot isolation», что может иметь последствия для приложений, требующих строгих гарантий ACID.
2. Моделирование данных — гибкость требует продуманного проектирования.
3. Joins — MongoDB не поддерживает традиционные SQL-соединения.
4. Операционные затраты — MongoDB может требовать больше опыта в эксплуатации.
5. Стоимость — эксплуатация MongoDB может быть дорогой, особенно при масштабировании.
MongoDB была создана из необходимости: основатели столкнулись с проблемами при разработке масштабных веб-приложений с использованием существующих баз данных.
С ростом интернета, появлением всё более динамичных веб-сайтов и приложений, старые инструменты баз данных не справлялись с нагрузкой. MongoDB была разработана для заполнения этого пробела. Она предложила разработчикам гибкость, масштабируемость и простоту использования, необходимые для нового веба.
MongoDB в основном написана на C++, но использует JavaScript для своей оболочки и Python для некоторых инструментов и драйверов. В то время как традиционные реляционные базы данных хранят данные в таблицах и строках, MongoDB, по своей сути, — это NoSQL, документоориентированная база данных.
Но MongoDB:
* хранит данные во внутреннем бинарном формате, называемом BSON (Binary JSON).
* BSON — это расширенный набор JSON.
* Он может представлять всё, что может JSON, плюс дополнительные типы данных, такие как даты и двоичные данные.
* BSON более компактен, чем JSON, что уменьшает объём памяти и повышает производительность.
* Такая структура позволяет более естественно представлять реальные объекты и связи между ними.
Архитектура MongoDB
1. Document Model — гибкая модель хранения данных в формате JSON, позволяющая использовать различные структуры и вложенные объекты.
2. Collections — группы документов, аналогичные таблицам, но без строгой схемы, обеспечивающие гибкую организацию.
3. mongod — основной процесс, обрабатывающий хранение, запросы и администрирование.
4. mongos (если используется шардирование) — маршрутизирует запросы в распределённом кластере к правильным разделам данных.
5. Replica Sets — несколько узлов поддерживают копии данных, обеспечивая высокую доступность и отказоустойчивость.
6. Sharding — горизонтальное масштабирование путём распределения данных по нескольким серверам для больших наборов данных и высокой нагрузки.
7. Indexes — структуры данных для ускорения запросов, поддерживающие различные типы для разных шаблонов доступа.
8. WiredTiger — механизм хранения по умолчанию, оптимизированный для использования памяти и диска с контролем параллелизма.
9. Aggregation Framework — мощный конвейерный фреймворк для сложного анализа и преобразования данных.
10. Query Language — выразительный язык для фильтрации, сортировки, проецирования и агрегации данных.
Примеры использования
* Системы управления контентом
* Аналитика в реальном времени
* Интернет вещей (IoT)
* Мобильные приложения
* Каталоги товаров
Проблемы и ограничения
1. Транзакции — использует модель «snapshot isolation», что может иметь последствия для приложений, требующих строгих гарантий ACID.
2. Моделирование данных — гибкость требует продуманного проектирования.
3. Joins — MongoDB не поддерживает традиционные SQL-соединения.
4. Операционные затраты — MongoDB может требовать больше опыта в эксплуатации.
5. Стоимость — эксплуатация MongoDB может быть дорогой, особенно при масштабировании.
👍12🤔2🤮2❤1🔥1
Как работает HTTPS. (описание к предыдущему посту)
Прежде всего есть два протокола:
1. HTTP (без S) — это протокол для обмена данными, который чаще всего используется между веб-браузером и веб-сайтом.
2. HTTPS — это защищённая версия этого протокола.
Почему HTTPS защищённый? Благодаря шифрованию.
Данные шифруются таким образом, что только веб-браузер и веб-сайт (сервер) знают, как их прочитать.
Без этого атаки типа «человек посередине» (MITM) могли бы перехватить ваш трафик и прочитать конфиденциальные данные, такие как пароли, данные кредитных карт и т. д.
Протокол, используемый для шифрования данных в HTTPS, — это TLS (Transport Layer Security):
💡 HTTPS = HTTP + TLS
HTTPS использует асимметричное шифрование для шифрования данных. У вас есть:
* 🔑 один закрытый ключ — секретный ключ SSL-сертификата веб-сайта, который никому не передаётся;
* 🔑 один открытый ключ — открытый ключ сертификата, который передаётся всем, кто хочет взаимодействовать с веб-сайтом.
💡 Асимметричное шифрование просто означает, что информация, зашифрованная открытым ключом, может быть расшифрована только закрытым ключом.
В отличие от этого, симметричное шифрование — это когда используется только один ключ, и данные могут быть зашифрованы/расшифрованы с помощью этого же ключа.
На самом деле HTTPS использует оба типа!
Асимметричное шифрование используется для проверки сервера и безопасного создания ключа сеанса. Ключ сеанса будет использоваться для симметричного шифрования.
Ключ сеанса, как следует из названия, существует только в течение сеанса и используется как клиентом, так и сервером для шифрования/дешифрования данных.
Самое интересное, что этот ключ детерминированно генерируется локально как клиентом, так и сервером независимо — он никогда не передаётся по сети.
Итак, какие шаги выполняются?
1. Клиент (браузер) подключается к серверу (веб-странице).
2. Сервер отправляет свой SSL-сертификат (включающий открытый ключ).
3. Клиент и сервер выполняют TLS-рукопожатие и генерируют ключ сеанса для шифрования/дешифрования будущих HTTP-данных.
4. Всё как обычно.
Подробности находятся в TLS-рукопожатии, и это, честно говоря, самая интересная часть работы HTTPS.
TLS-рукопожатие служит трём целям:
* 🔍 проверка подлинности сервера;
* ✨ генерация ключей сеанса для шифрования во время этого сеанса;
* 🤝 выбор версии TLS и наборов шифров, которые будут использоваться.
Пошагово (используя алгоритм TLS 1.2 RSA, потому что он проще):
1. Client Hello Request: клиент инициирует рукопожатие с сообщением, включающим версию TLS и поддерживаемые шифры, а также строку случайных байтов (называемую client random).
2. Server Hello Response: сервер выбирает набор шифров и генерирует свою строку случайных байтов (server random). Он отвечает с набором шифров, своим SSL-сертификатом и server random.
3. Client Verification: клиент проверяет сертификат через доверенный центр сертификации, который его выдал. SSL-сертификат имеет цифровую подпись, которая подписана закрытым ключом CA, поэтому клиент использует открытый ключ CA для её расшифровки.
После этого шага клиент проверил, что сертификат является легитимным и подтверждён через CA — не поддельным.
Примечание: он всё ещё не знает наверняка, действительно ли сервер владеет этим сертификатом (т. е. имеет закрытый ключ).
🤔 Кто определяет, какому центру сертификации можно доверять?
Компания, создавшая ваш браузер! Apple, Microsoft, Google, Mozilla и другие поддерживают свой список центров сертификации. Ваш браузер/ОС поставляется с этим списком доверенных центров сертификации.
Всё основано на доверии, так что лучше им доверять...
Продолжаем:
Прежде всего есть два протокола:
1. HTTP (без S) — это протокол для обмена данными, который чаще всего используется между веб-браузером и веб-сайтом.
2. HTTPS — это защищённая версия этого протокола.
Почему HTTPS защищённый? Благодаря шифрованию.
Данные шифруются таким образом, что только веб-браузер и веб-сайт (сервер) знают, как их прочитать.
Без этого атаки типа «человек посередине» (MITM) могли бы перехватить ваш трафик и прочитать конфиденциальные данные, такие как пароли, данные кредитных карт и т. д.
Протокол, используемый для шифрования данных в HTTPS, — это TLS (Transport Layer Security):
💡 HTTPS = HTTP + TLS
HTTPS использует асимметричное шифрование для шифрования данных. У вас есть:
* 🔑 один закрытый ключ — секретный ключ SSL-сертификата веб-сайта, который никому не передаётся;
* 🔑 один открытый ключ — открытый ключ сертификата, который передаётся всем, кто хочет взаимодействовать с веб-сайтом.
💡 Асимметричное шифрование просто означает, что информация, зашифрованная открытым ключом, может быть расшифрована только закрытым ключом.
В отличие от этого, симметричное шифрование — это когда используется только один ключ, и данные могут быть зашифрованы/расшифрованы с помощью этого же ключа.
На самом деле HTTPS использует оба типа!
Асимметричное шифрование используется для проверки сервера и безопасного создания ключа сеанса. Ключ сеанса будет использоваться для симметричного шифрования.
Ключ сеанса, как следует из названия, существует только в течение сеанса и используется как клиентом, так и сервером для шифрования/дешифрования данных.
Самое интересное, что этот ключ детерминированно генерируется локально как клиентом, так и сервером независимо — он никогда не передаётся по сети.
Итак, какие шаги выполняются?
1. Клиент (браузер) подключается к серверу (веб-странице).
2. Сервер отправляет свой SSL-сертификат (включающий открытый ключ).
3. Клиент и сервер выполняют TLS-рукопожатие и генерируют ключ сеанса для шифрования/дешифрования будущих HTTP-данных.
4. Всё как обычно.
Подробности находятся в TLS-рукопожатии, и это, честно говоря, самая интересная часть работы HTTPS.
TLS-рукопожатие служит трём целям:
* 🔍 проверка подлинности сервера;
* ✨ генерация ключей сеанса для шифрования во время этого сеанса;
* 🤝 выбор версии TLS и наборов шифров, которые будут использоваться.
Пошагово (используя алгоритм TLS 1.2 RSA, потому что он проще):
1. Client Hello Request: клиент инициирует рукопожатие с сообщением, включающим версию TLS и поддерживаемые шифры, а также строку случайных байтов (называемую client random).
2. Server Hello Response: сервер выбирает набор шифров и генерирует свою строку случайных байтов (server random). Он отвечает с набором шифров, своим SSL-сертификатом и server random.
3. Client Verification: клиент проверяет сертификат через доверенный центр сертификации, который его выдал. SSL-сертификат имеет цифровую подпись, которая подписана закрытым ключом CA, поэтому клиент использует открытый ключ CA для её расшифровки.
После этого шага клиент проверил, что сертификат является легитимным и подтверждён через CA — не поддельным.
Примечание: он всё ещё не знает наверняка, действительно ли сервер владеет этим сертификатом (т. е. имеет закрытый ключ).
🤔 Кто определяет, какому центру сертификации можно доверять?
Компания, создавшая ваш браузер! Apple, Microsoft, Google, Mozilla и другие поддерживают свой список центров сертификации. Ваш браузер/ОС поставляется с этим списком доверенных центров сертификации.
Всё основано на доверии, так что лучше им доверять...
Продолжаем:
❤10🔥1👏1
4. Client Key Exchange: клиент создаёт случайную строку байтов, называемую «premaster secret». Он шифрует её с помощью открытого ключа сервера, полученного из SSL-сертификата, и отправляет. Поскольку для шифрования используется алгоритм асимметричного шифрования, клиент знает, что сервер может получить секрет только если расшифрует его с помощью закрытого ключа (что подтверждает владение сертификатом).
5. Session Key Generation: сервер расшифровывает premaster secret с помощью закрытого ключа SSL-сертификата. Клиент и сервер независимо генерируют ключи сеанса локально, используя комбинацию client random, server random и premaster secret.
Поскольку они используют одни и те же данные и детерминированный алгоритм, они должны прийти к одинаковым результатам.
Если это не так, последующее шифрование/дешифрование данных при записи не будет соответствовать протоколу HTTP/HTTPS и завершится ошибкой.
💡 Шаг 5 косвенно подтверждает клиенту, что сервер владеет предоставленным им SSL-сертификатом (а не просто делает вид, что он у него есть).
После этого сеансовый ключ может использоваться для симметричного шифрования/дешифрования HTTP-данных.
5. Session Key Generation: сервер расшифровывает premaster secret с помощью закрытого ключа SSL-сертификата. Клиент и сервер независимо генерируют ключи сеанса локально, используя комбинацию client random, server random и premaster secret.
Поскольку они используют одни и те же данные и детерминированный алгоритм, они должны прийти к одинаковым результатам.
Если это не так, последующее шифрование/дешифрование данных при записи не будет соответствовать протоколу HTTP/HTTPS и завершится ошибкой.
💡 Шаг 5 косвенно подтверждает клиенту, что сервер владеет предоставленным им SSL-сертификатом (а не просто делает вид, что он у него есть).
После этого сеансовый ключ может использоваться для симметричного шифрования/дешифрования HTTP-данных.
👍10👏3🔥2
На сопровождающих JavaScript-библиотеки на сервисе NPM была совершена масштабная фишинг-атака, в ходе которой от имени сервиса NPM было разослано сообщение о необходимости подтвердить свой email. Проведённая атака позволила злоумышленникам получить NPM-токены сопровождающего одного из крупных JavaScript-проектов и выпустить обновления с вредоносным кодом для пяти NPM-пакетов, в сумме насчитывающих около 100 млн загрузок в неделю.
Отправленное сопровождающим сообщение было стилизовано под типовые уведомления NPM, отправляемые с адреса "support@npmjs.org", но в качестве ссылки для перехода был указан домен "npnjs.com" вместо "npmjs.com" (третья буква "n" вместо "m").
В ходе атаки были сгенерированы новые версии пакетов:
eslint-config-prettier: 8.10.1, 9.1.1, 10.1.6, 10.1.7.
eslint-plugin-prettier: 4.2.2, 4.2.3.
synckit: 0.11.9.
@pkgr/core: 0.2.8.
napi-postinstall: 0.3.1.
В пакеты был добавлен вредоносный код для атаки на пользователей Windows - они загружали библиотеку node-gyp.dll с функциональностью для удалённого выполнения команд.
Неизвестно, сколько пользователей успело загрузить вредоносные версии (например, вредоносная версия пакета eslint-plugin-prettier оставалась в репозитории около двух дней), но данные пакеты довольно широко используются. Так, за прошлую неделю пакет eslint-config-prettier насчитывал 30 млн загрузок и использовался в качестве зависимости у 11762 тысячи пакетов, пакет eslint-plugin-prettier - 21 млн загрузок (8468 зависимых пакетов), synckit - 18 млн, @pkgr/core - 16 млн и napi-postinstall - 10 млн.
https://socket.dev/blog/npm-phishing-campaign-leads-to-prettier-tooling-packages-compromise
Отправленное сопровождающим сообщение было стилизовано под типовые уведомления NPM, отправляемые с адреса "support@npmjs.org", но в качестве ссылки для перехода был указан домен "npnjs.com" вместо "npmjs.com" (третья буква "n" вместо "m").
В ходе атаки были сгенерированы новые версии пакетов:
eslint-config-prettier: 8.10.1, 9.1.1, 10.1.6, 10.1.7.
eslint-plugin-prettier: 4.2.2, 4.2.3.
synckit: 0.11.9.
@pkgr/core: 0.2.8.
napi-postinstall: 0.3.1.
В пакеты был добавлен вредоносный код для атаки на пользователей Windows - они загружали библиотеку node-gyp.dll с функциональностью для удалённого выполнения команд.
Неизвестно, сколько пользователей успело загрузить вредоносные версии (например, вредоносная версия пакета eslint-plugin-prettier оставалась в репозитории около двух дней), но данные пакеты довольно широко используются. Так, за прошлую неделю пакет eslint-config-prettier насчитывал 30 млн загрузок и использовался в качестве зависимости у 11762 тысячи пакетов, пакет eslint-plugin-prettier - 21 млн загрузок (8468 зависимых пакетов), synckit - 18 млн, @pkgr/core - 16 млн и napi-postinstall - 10 млн.
https://socket.dev/blog/npm-phishing-campaign-leads-to-prettier-tooling-packages-compromise
Socket
Active Supply Chain Attack: npm Phishing Campaign Leads to P...
Popular npm packages like eslint-config-prettier were compromised after a phishing attack stole a maintainer’s token, spreading malicious updates.
🕊16😱9💊7
Несколько дней назад исследователи по безопасности также обратили внимание на 28 NPM-пакетов, авторами которых было включено изменение категории Protestware. Изменение приводило к воспроизведению украинского гимна и отключению обработки событий от мыши на сайтах в доменных зонах "ru", "su", "by" и "рф", если пользователь ранее уже открывал сайт более трёх дней назад и в его браузере была включена поддержка русского языка.
https://socket.dev/blog/protestware-update-28-npm-packages-affected-by-payload-targeting-russian-language-users
https://socket.dev/blog/protestware-update-28-npm-packages-affected-by-payload-targeting-russian-language-users
Socket
Tracking Protestware Spread: 28 npm Packages Affected by Pay...
Undocumented protestware found in 28 npm packages disrupts UI for Russian-language users visiting Russian and Belarusian domains.
😁24🤡17👎3🤮3🔥2😱2👏1🤬1💊1