[{"data":1,"prerenderedAt":1095},["ShallowReactive",2],{"$fRXdvMyQQNYZCuOF0Q4xaTCfkGqUP1bTz2MHl93zIUb4":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":97,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":100,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":105,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":450,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":672,"mdc-6i712i-key":692,"mdc-rol39m-key":704,"mdc-l8fcqp-key":722,"mdc-ysk31d-key":730,"mdc-gooaq0-key":747,"mdc--urz9ff-key":755,"mdc--svmw2g-key":763,"mdc-iedkk4-key":778,"mdc--nlsvd5-key":811,"mdc--lbv5ph-key":847,"mdc--vclbl0-key":855,"mdc--gj82b6-key":874,"mdc--zmf17-key":882,"mdc-rclznk-key":1012,"mdc-jjh06v-key":1026,"mdc-7ky0e7-key":1073,"mdc--h3pgv9-key":1081},{"content":4,"quizQuestionContent":68,"type":86,"pageMeta":87},[5,9,13,16,20,23,27,31,34,37,41,45,48,52,55,59,62,65],{"id":6,"value":7,"isTypeH1":8},"1867","Всё, что идет по HTTPS – оно защищено?",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4247","Теория по задаче","theory-on-the-task",{"id":14,"value":15,"isTypeParagraph":8},"9785","Под `HTTPS` обычно понимается `HTTP` поверх `TLS`, то есть прикладной протокол, упакованный в криптографически защищённый транспортный канал.",{"id":17,"value":18,"anchor":19,"isTypeH2":8},"4248","Что именно даёт HTTPS (TLS)","what-https-provides-tls",{"id":21,"value":22,"isTypeParagraph":8},"9786","HTTPS опирается на свойства TLS: конфиденциальность (шифрование), целостность (защита от незаметной подмены) и аутентификацию сервера (проверка, что соединение установлено с владельцем домена/сертификата, а не с посредником).\n\nВ типичном браузерном сценарии TLS аутентифицирует сервер через цепочку сертификатов, а клиент чаще всего не аутентифицируется сертификатом (если не используется mTLS).\n\nПосле установления TLS-канала HTTP-запросы и ответы передаются как зашифрованные данные приложения, поэтому злоумышленник “на пути” (в публичном Wi‑Fi, у провайдера, на промежуточном маршрутизаторе) не должен иметь возможности читать или незаметно изменять содержимое обмена.\n\nСхема (упрощённо):\n```\nбраузер\n  HTTP запрос/ответ\n    ↓ (упаковка)\n  TLS (шифрование, проверка сертификата)\n    ↓\n  TCP/QUIC транспорт\n    ↓\nсервер\n```",{"id":24,"description":25,"titleAlert":26,"isTypeAlertInfo":8},"600","Даже при корректном TLS остаются риски утечек по метаданным (например, размеры/тайминги), а также риски на конечных точках (браузер/сервер), которые TLS не закрывает.",null,{"id":28,"value":29,"anchor":30,"isTypeH2":8},"4249","Что HTTPS НЕ гарантирует","what-https-does-not-guarantee",{"id":32,"value":33,"isTypeParagraph":8},"9787","HTTPS не гарантирует, что сайт “хороший” или заслуживает доверия: фишинговый сайт может иметь корректный сертификат и работать по HTTPS, а введённые данные будут украдены самим сайтом (то есть конечной точкой, а не атакующим “в дороге”).\n\nHTTPS не устраняет уязвимости веб‑приложения: при наличии XSS/CSRF/уязвимостей логики, ошибок авторизации или утечек токенов безопасный транспорт не препятствует атаке, потому что вредоносные действия выполняются “легально” в рамках установленного соединения.\n\nHTTPS не защищает от компрометации сервера или цепочки поставки (внедрение вредоносного кода в сборку, подмена зависимости, компрометация CDN): TLS корректно доставит вредоносный JavaScript пользователю, просто в зашифрованном виде.",{"id":35,"description":36,"titleAlert":26,"isTypeAlertInfo":8},"601","Логическая подмена понятия “защищённый канал” → “безопасный сайт” является типичной причиной ошибочных решений (например, доверие “замку” вместо проверки домена, репутации и поведения приложения).",{"id":38,"value":39,"anchor":40,"isTypeH2":8},"4250","Типовые провалы даже при HTTPS","common-failures-even-with-https",{"id":42,"value":43,"anchor":44,"isTypeH3":8},"4273","Смешанный контент (mixed content)","mixed-content",{"id":46,"value":47,"isTypeParagraph":8},"9788","Смешанный контент — ситуация, когда HTML загружается по HTTPS, но часть ресурсов подгружается по HTTP; тогда злоумышленник на сети может подменить эти ресурсы и повлиять на страницу, несмотря на HTTPS у основного документа.\n\nАктивный смешанный контент (например, скрипты и таблицы стилей) наиболее опасен: подмена `script` или `stylesheet` часто приводит к полному захвату страницы (кража токенов/куки, подмена форм, внедрение редиректов), поэтому браузеры стремятся блокировать такие загрузки.\n\nПассивный смешанный контент (например, изображения) обычно менее критичен, но всё равно нарушает целостность контента и может использоваться для обмана пользователя (подмена “скриншота интерфейса”, кнопок на баннере и т. п.).\n\nМини-таблица: ресурс по HTTP внутри HTTPS-страницы\n| Ресурс | Почему опасно | Типичный эффект |\n|---|---|---|\n| `script` / `stylesheet` | Влияет на логику и DOM | Кража данных, подмена форм, редиректы, внедрение трекеров |\n| `img` / `video` | Влияет на отображаемый контент | Подмена визуальных доказательств, обман, деградация доверия |",{"id":49,"value":50,"anchor":51,"isTypeH3":8},"4274","“Одна HTTP-дырка” в цепочке","one-http-hole",{"id":53,"value":54,"isTypeParagraph":8},"9789","Политика “всё по HTTPS” относится ко всей цепочке: достаточно одного HTTP-редиректа, одного HTTP-ресурса или одного незашифрованного API‑вызова, чтобы снова появился вектор MITM и подмена данных.\n\nЧастая ошибка — считать, что “главная страница по HTTPS, значит достаточно”, хотя критичные данные могут уходить через сторонние скрипты, аналитические пиксели, устаревшие эндпоинты или редиректы.",{"id":56,"value":57,"anchor":58,"isTypeH3":8},"4275","HSTS как защита от отката на HTTP","hsts",{"id":60,"value":61,"isTypeParagraph":8},"9790","HSTS — механизм, при котором сервер сообщает браузеру, что к домену следует обращаться только по HTTPS, используя заголовок `Strict-Transport-Security`.\n\nПри активном HSTS браузер обычно автоматически переводит будущие попытки открыть `http://` на `https://` и жёстче относится к ошибкам TLS (снижается риск “принудительного отката” на HTTP через атаки на первой загрузке/редиректах).\n\nПример заголовка (типовой):\n`Strict-Transport-Security: max-age=31536000; includeSubDomains`",{"id":63,"description":64,"titleAlert":26,"isTypeAlertInfo":8},"602","HSTS снижает риск downgrade‑атак, но не предотвращает фишинг (похожий домен может так же честно включить HSTS) и не лечит уязвимости приложения.",{"id":66,"value":67,"isTypeParagraph":8},"9791","**Короткий ответ**: HTTPS (TLS) защищает канал передачи (конфиденциальность, целостность, аутентификация сервера), но не гарантирует безопасность сайта как приложения; при оценке “защищено ли” необходимо учитывать фишинг, компрометацию сервера, уязвимости (например, XSS) и проблемы смешанного контента, а также применять механизмы вроде HSTS.",{"id":69,"options":70,"hint":84,"solution":85,"description":7},"1113",[71,75,78,81],{"id":72,"label":73,"isCorrect":74},"4580","HTTPS нужен только для оплаты и формы входа, а остальные страницы и ресурсы можно оставлять на `http://`, потому что браузер всё равно “запомнит”, что домен поддерживает шифрование, и защита распространится автоматически.",false,{"id":76,"label":77,"isCorrect":8},"4581","HTTPS защищает данные в пути между браузером и сервером (шифрование и целостность) и подтверждает сервер, но не гарантирует, что сайт не фишинговый, не уязвимый и не скомпрометирован; защита относится к каналу, а не к безопасности приложения.",{"id":79,"label":80,"isCorrect":74},"4582","HTTPS делает сайт безопасным “целиком”: фишинг, XSS и вредоносные скрипты невозможны, потому что злоумышленник не может ничего передать по `https://`, а значит любые атаки автоматически блокируются транспортом.",{"id":82,"label":83,"isCorrect":74},"4583","HTTPS почти бесполезен: он “показывает замок” и шифрует только адрес страницы, а тело запросов и ответы остаются открытыми для Wi‑Fi‑точек, провайдеров и любых промежуточных маршрутизаторов.","Полезно разделять понятия “защищённый туннель” и “надёжность получателя”: HTTPS делает туннель приватным и защищённым от подмены по дороге, но не делает получателя честным и не устраняет уязвимости приложения.","**Правильный ответ: 2** - HTTPS защищает данные в пути между браузером и сервером (шифрование и целостность) и подтверждает сервер, но не гарантирует, что сайт не фишинговый, не уязвимый и не скомпрометирован; защита относится к каналу, а не к безопасности приложения.","quizQuestion",{"title":7,"description":88,"ogTitle":89,"ogDescription":88,"ogImageUrl":90,"canonical":26,"ogLocale":91,"ogSiteName":92,"ogImageType":93,"ogImageWidth":94,"ogImageHeight":95,"ogType":96,"ogUrl":26},"HTTPS шифрует трафик и проверяет домен, но не защищает от фишинга, взлома сервера, XSS и смешанного контента.","HTTPS защищает канал, но не делает сайт безопасным","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":98,"siteUrl":99},"GOOD WEB JOB!","https://goodwebjob.ru",[101],{"label":102,"slug":103,"to":104},"Подготовка к тех.интервью","technical-interview","/technical-interview/where-to-begin",{"navigationList":106,"navigationSublist":114},[107,110],{"path":104,"isActive":74,"name":108,"icon":109,"isNavbarMobileDisabled":8},"С чего начать?","material-symbols:visibility-outline-rounded",{"path":111,"isActive":8,"name":112,"icon":113,"isNavbarMobileDisabled":74},"/technical-interview/tasks","Сборник задач","material-symbols:task-outline",[115,124,151,163,169,310,334,343,349,411,432,438],{"title":116,"list":117,"isOpened":74},"Bash",[118,121],{"name":119,"path":120,"isActive":74},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":122,"path":123,"isActive":74},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":125,"list":126,"isOpened":74},"CSS",[127,130,133,136,139,142,145,148],{"name":128,"path":129,"isActive":74},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":131,"path":132,"isActive":74},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":134,"path":135,"isActive":74},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":137,"path":138,"isActive":74},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":140,"path":141,"isActive":74},"Есть HTML код. Будет ли font-weight на span влиять?","/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":143,"path":144,"isActive":74},"Flexbox и Grid, чем отличаются друг от друга?","/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":146,"path":147,"isActive":74},"Заменяют ли Flexbox и Grid друг друга?","/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":149,"path":150,"isActive":74},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":152,"list":153,"isOpened":74},"Git",[154,157,160],{"name":155,"path":156,"isActive":74},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":158,"path":159,"isActive":74},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":161,"path":162,"isActive":74},"Какие существуют стратегии ветвления для работы команды? Что это такое?","/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":164,"list":165,"isOpened":74},"HTML",[166],{"name":167,"path":168,"isActive":74},"Что такое HTML?","/technical-interview/tasks/what-is-html",{"title":170,"list":171,"isOpened":74},"JavaScript",[172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307],{"name":173,"path":174,"isActive":74},"Какие логические значения в console.log будут получены?","/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":176,"path":177,"isActive":74},"Почему опасно писать прямо в прототипы базовых типов?","/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":179,"path":180,"isActive":74},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":182,"path":183,"isActive":74},"Какое значение выведет консоль с object.property?","/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":185,"path":186,"isActive":74},"Что выведется в console.log([arr[0](), arr[0]()])?","/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":188,"path":189,"isActive":74},"Что выведет console.log в результате выполнения цикла while?","/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":191,"path":192,"isActive":74},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":194,"path":195,"isActive":74},"Что вернёт метод book.getUpperName()?","/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":197,"path":198,"isActive":74},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":200,"path":201,"isActive":74},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":203,"path":204,"isActive":74},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":206,"path":207,"isActive":74},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":209,"path":210,"isActive":74},"Что вернёт этот код: typeof (function(){})()","/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":212,"path":213,"isActive":74},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":215,"path":216,"isActive":74},"Какие способы объявления функции есть в JavaScript?","/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":218,"path":219,"isActive":74},"Что такое this в JavaScript?","/technical-interview/tasks/what-is-this-in-javascript",{"name":221,"path":222,"isActive":74},"Что такое Event Loop, как работает?","/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":224,"path":225,"isActive":74},"Что будет, если вызвать typeof на необъявленной переменной?","/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":227,"path":228,"isActive":74},"Что показывает оператор typeof в JavaScript?","/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":230,"path":231,"isActive":74},"Какие типы данных существует в JavaScript?","/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":233,"path":234,"isActive":74},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":236,"path":237,"isActive":74},"Что вернет typeof для массива?","/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":239,"path":240,"isActive":74},"Почему оператор typeof, применённый к массиву, возвращает объект?","/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":242,"path":243,"isActive":74},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":245,"path":246,"isActive":74},"Что возвращает typeof для new Set в JavaScript?","/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":248,"path":249,"isActive":74},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":251,"path":252,"isActive":74},"В чем разница между микро- и макро-тасками в JavaScript?","/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":254,"path":255,"isActive":74},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":257,"path":258,"isActive":74},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":260,"path":261,"isActive":74},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":263,"path":264,"isActive":74},"Дано дерево (вложенный объект), надо найти сумму всех вершин","/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":266,"path":267,"isActive":74},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":269,"path":270,"isActive":74},"Для каждой ветви дерева записать номер вложенности данной ветви","/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":272,"path":273,"isActive":74},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":275,"path":276,"isActive":74},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":278,"path":279,"isActive":74},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":281,"path":282,"isActive":74}," Найти в массиве неповторяющиеся числа","/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":284,"path":285,"isActive":74},"Напишите функцию, который сделает из массива объект","/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":287,"path":288,"isActive":74},"Необходимо проверить, являются ли две строки анаграммами друг друга","/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":290,"path":291,"isActive":74},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":293,"path":294,"isActive":74},"Определить, является ли слово палиндромом","/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":296,"path":297,"isActive":74},"«Расплющивание» массива","/technical-interview/tasks/flattening-the-array",{"name":299,"path":300,"isActive":74},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":302,"path":303,"isActive":74},"Сжатие строк","/technical-interview/tasks/string-compression",{"name":305,"path":306,"isActive":74},"Уникализация значений в массиве","/technical-interview/tasks/unifying-values-in-an-array",{"name":308,"path":309,"isActive":74},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":311,"list":312,"isOpened":74},"React",[313,316,319,322,325,328,331],{"name":314,"path":315,"isActive":74},"Для чего нужен React, какие он решает проблемы?","/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":317,"path":318,"isActive":74},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":320,"path":321,"isActive":74},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":323,"path":324,"isActive":74},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":326,"path":327,"isActive":74},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":329,"path":330,"isActive":74},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":332,"path":333,"isActive":74},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":335,"list":336,"isOpened":74},"Алгоритмы",[337,340],{"name":338,"path":339,"isActive":74},"Что такое алгоритмическая сложность?","/technical-interview/tasks/what-is-algorithmic-complexity",{"name":341,"path":342,"isActive":74},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":344,"list":345,"isOpened":74},"Дебаггинг",[346],{"name":347,"path":348,"isActive":74},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":350,"list":351,"isOpened":74},"Компьютерные сети",[352,355,358,361,364,367,370,373,376,379,382,385,388,391,394,397,400,402,405,408],{"name":353,"path":354,"isActive":74},"Как браузер после ввода домена понимает, откуда брать сайт?","/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":356,"path":357,"isActive":74},"Что такое DNS, как DNS находит нужный IP-адрес?","/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":359,"path":360,"isActive":74},"Как домен попадает в DNS в таблицу соответствия: домен – ip","/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":362,"path":363,"isActive":74},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":365,"path":366,"isActive":74},"Ключевые отличия TCP и UDP","/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":368,"path":369,"isActive":74},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":371,"path":372,"isActive":74},"Что такое HTTP и из чего состоит?","/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":374,"path":375,"isActive":74},"Что такое заголовки в HTTP и зачем они нужны?","/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":377,"path":378,"isActive":74},"Что такое параметры в HTTP?","/technical-interview/tasks/what-are-http-parameters",{"name":380,"path":381,"isActive":74},"Где находится HTML-код в структуре HTTP-ответа?","/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":383,"path":384,"isActive":74},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":386,"path":387,"isActive":74},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":389,"path":390,"isActive":74},"Что такое cookie?","/technical-interview/tasks/what-is-a-cookie",{"name":392,"path":393,"isActive":74},"Кто является инициатором записи cookie в браузере?","/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":395,"path":396,"isActive":74},"Есть ли возможность с клиента (с браузера) управлять cookie?","/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":398,"path":399,"isActive":74},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":7,"path":401,"isActive":74},"/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":403,"path":404,"isActive":74},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":406,"path":407,"isActive":74},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":409,"path":410,"isActive":74},"Каким способом может выполняться авторизация пользователя на сайте?","/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":412,"list":413,"isOpened":74},"Отрисовка в браузере",[414,417,420,423,426,429],{"name":415,"path":416,"isActive":74},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":418,"path":419,"isActive":74},"Как браузер парсит JavaScript и изображения при рендеринге?","/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":421,"path":422,"isActive":74},"Что в браузере блокирует рендеринг страницы?","/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":424,"path":425,"isActive":74},"Что такое DOM в браузере? Что такое CSSOM?","/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":427,"path":428,"isActive":74},"Что является узлами в DOM?","/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":430,"path":431,"isActive":74},"Из чего состоит CSSOM?","/technical-interview/tasks/what-does-cssom-consist-of",{"title":433,"list":434,"isOpened":74},"Ревью кода",[435],{"name":436,"path":437,"isActive":74},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":439,"list":440,"isOpened":74},"Теория вероятности",[441,444,447],{"name":442,"path":443,"isActive":74},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":445,"path":446,"isActive":74},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":448,"path":449,"isActive":74},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"slugs":451},[452,455,457,459,461,464,467,469,471,473,475,477,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,662,664,666,668,670],{"name":453,"value":454},"Теоретические задания","theoretical-tasks",{"name":209,"value":456},"what-this-code-will-return-typeof-function",{"name":108,"value":458},"where-to-begin",{"name":176,"value":460},"why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":462,"value":463},"Backend","backend",{"name":465,"value":466},"Frontend","frontend",{"name":173,"value":468},"prototype-what-logical-values-will-be-received-in-console-log",{"name":290,"value":470},"odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":281,"value":472},"find-non-repeating-numbers-in-an-array",{"name":254,"value":474},"arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":260,"value":476},"the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":478,"value":479},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":266,"value":481},"for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":182,"value":483},"what-value-will-the-console-output-with-object-property",{"name":185,"value":485},"what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":257,"value":487},"returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":287,"value":489},"checks-whether-two-strings-are-anagrams-of-each-other",{"name":293,"value":491},"determines-whether-a-word-is-a-palindrome",{"name":272,"value":493},"there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":299,"value":495},"implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":263,"value":497},"given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":269,"value":499},"for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":275,"value":501},"there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":308,"value":503},"the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":278,"value":505},"there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":284,"value":507},"write-a-function-that-will-make-an-object-out-of-an-array",{"name":188,"value":509},"what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":191,"value":511},"there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":203,"value":513},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":206,"value":515},"what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":305,"value":517},"unifying-values-in-an-array",{"name":296,"value":519},"flattening-the-array",{"name":194,"value":521},"what-will-the-book-get-upper-name-method-return",{"name":302,"value":523},"string-compression",{"name":200,"value":525},"what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":212,"value":527},"what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":353,"value":529},"how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":359,"value":531},"how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":362,"value":533},"how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":365,"value":535},"key-differences-between-tcp-and-udp",{"name":368,"value":537},"tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":371,"value":539},"what-is-http-and-what-does-it-consist-of",{"name":374,"value":541},"what-are-http-headers-and-why-do-we-need-them",{"name":377,"value":543},"what-are-http-parameters",{"name":380,"value":545},"where-is-the-html-code-located-in-the-http-response-structure",{"name":167,"value":547},"what-is-html",{"name":383,"value":549},"what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":386,"value":551},"the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":389,"value":553},"what-is-a-cookie",{"name":392,"value":555},"who-initiates-the-cookie-recording-in-the-browser",{"name":395,"value":557},"is-it-possible-to-manage-cookies-from-the-client-browser",{"name":559,"value":560},"Лайвкодинг","livecoding",{"name":179,"value":562},"what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":7,"value":564},"is-everything-that-goes-through-https-secure",{"name":403,"value":566},"all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":406,"value":568},"there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":418,"value":570},"how-the-browser-parses-javascript-and-images-when-rendering",{"name":415,"value":572},"what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":421,"value":574},"what-is-blocking-the-page-rendering-in-the-browser",{"name":424,"value":576},"what-is-dom-in-a-browser-what-is-cssom",{"name":427,"value":578},"what-are-nodes-in-the-dom",{"name":430,"value":580},"what-does-cssom-consist-of",{"name":128,"value":582},"the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":131,"value":584},"there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":134,"value":586},"there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":137,"value":588},"there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":140,"value":590},"there-is-an-html-code-will-font-weight-affect-span",{"name":143,"value":592},"what-are-the-differences-between-flexbox-and-grid",{"name":146,"value":594},"do-flexbox-and-grid-replace-each-other",{"name":149,"value":596},"there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":112,"value":598},"tasks",{"name":215,"value":600},"what-are-the-ways-to-declare-a-function-in-javascript",{"name":218,"value":602},"what-is-this-in-javascript",{"name":221,"value":604},"what-is-an-event-loop-and-how-does-it-work",{"name":224,"value":606},"what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":227,"value":608},"what-does-the-typeof-operator-show-in-javascript",{"name":230,"value":610},"what-types-of-data-exist-in-javascript",{"name":233,"value":612},"what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":236,"value":614},"what-will-typeof-return-for-an-array",{"name":239,"value":616},"why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":242,"value":618},"if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":245,"value":620},"what-does-typeof-return-for-new-set-in-javascript",{"name":314,"value":622},"what-is-react-used-for-and-what-problems-does-it-solve",{"name":320,"value":624},"if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":323,"value":626},"there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":326,"value":628},"there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":329,"value":630},"why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":347,"value":632},"how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":155,"value":634},"developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":158,"value":636},"git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":161,"value":638},"what-are-the-branching-strategies-for-the-team-what-is-it",{"name":436,"value":640},"how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":119,"value":642},"here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":122,"value":644},"here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":338,"value":646},"what-is-algorithmic-complexity",{"name":341,"value":648},"what-is-the-algorithmic-complexity-of-quick-sort",{"name":248,"value":650},"why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":409,"value":652},"how-can-a-user-be-authorized-on-a-website",{"name":251,"value":654},"what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":442,"value":656},"there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":445,"value":658},"there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":448,"value":660},"how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":102,"value":103},{"name":398,"value":663},"is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":356,"value":665},"what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":197,"value":667},"variables-are-declared-as-follows-specify-the-correct-statement",{"name":317,"value":669},"what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":332,"value":671},"what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"cooperation":673,"copyright":676,"reportError":677,"socialNetwork":679},{"link":674,"title":675},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":678,"link":674},"Сообщить об ошибке",{"label":680,"socialNetworkList":681},"Мы в соцсетях:",[682,685,688],{"icon":26,"link":683,"title":684},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":686,"link":674,"title":687},"ic:baseline-telegram","Telegram",{"icon":689,"link":690,"title":691},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":693,"body":694},{},{"type":695,"children":696},"root",[697],{"type":698,"tag":699,"props":700,"children":701},"element","p",{},[702],{"type":703,"value":7},"text",{"data":705,"body":706},{},{"type":695,"children":707},[708],{"type":698,"tag":699,"props":709,"children":710},{},[711,713,720],{"type":703,"value":712},"HTTPS нужен только для оплаты и формы входа, а остальные страницы и ресурсы можно оставлять на ",{"type":698,"tag":714,"props":715,"children":717},"code",{"className":716},[],[718],{"type":703,"value":719},"http://",{"type":703,"value":721},", потому что браузер всё равно “запомнит”, что домен поддерживает шифрование, и защита распространится автоматически.",{"data":723,"body":724},{},{"type":695,"children":725},[726],{"type":698,"tag":699,"props":727,"children":728},{},[729],{"type":703,"value":77},{"data":731,"body":732},{},{"type":695,"children":733},[734],{"type":698,"tag":699,"props":735,"children":736},{},[737,739,745],{"type":703,"value":738},"HTTPS делает сайт безопасным “целиком”: фишинг, XSS и вредоносные скрипты невозможны, потому что злоумышленник не может ничего передать по ",{"type":698,"tag":714,"props":740,"children":742},{"className":741},[],[743],{"type":703,"value":744},"https://",{"type":703,"value":746},", а значит любые атаки автоматически блокируются транспортом.",{"data":748,"body":749},{},{"type":695,"children":750},[751],{"type":698,"tag":699,"props":752,"children":753},{},[754],{"type":703,"value":83},{"data":756,"body":757},{},{"type":695,"children":758},[759],{"type":698,"tag":699,"props":760,"children":761},{},[762],{"type":703,"value":84},{"data":764,"body":765},{},{"type":695,"children":766},[767],{"type":698,"tag":699,"props":768,"children":769},{},[770,776],{"type":698,"tag":771,"props":772,"children":773},"strong",{},[774],{"type":703,"value":775},"Правильный ответ: 2",{"type":703,"value":777}," - HTTPS защищает данные в пути между браузером и сервером (шифрование и целостность) и подтверждает сервер, но не гарантирует, что сайт не фишинговый, не уязвимый и не скомпрометирован; защита относится к каналу, а не к безопасности приложения.",{"data":779,"body":780},{},{"type":695,"children":781},[782],{"type":698,"tag":699,"props":783,"children":784},{},[785,787,793,795,801,803,809],{"type":703,"value":786},"Под ",{"type":698,"tag":714,"props":788,"children":790},{"className":789},[],[791],{"type":703,"value":792},"HTTPS",{"type":703,"value":794}," обычно понимается ",{"type":698,"tag":714,"props":796,"children":798},{"className":797},[],[799],{"type":703,"value":800},"HTTP",{"type":703,"value":802}," поверх ",{"type":698,"tag":714,"props":804,"children":806},{"className":805},[],[807],{"type":703,"value":808},"TLS",{"type":703,"value":810},", то есть прикладной протокол, упакованный в криптографически защищённый транспортный канал.",{"data":812,"body":813},{},{"type":695,"children":814},[815,820,825,830,835],{"type":698,"tag":699,"props":816,"children":817},{},[818],{"type":703,"value":819},"HTTPS опирается на свойства TLS: конфиденциальность (шифрование), целостность (защита от незаметной подмены) и аутентификацию сервера (проверка, что соединение установлено с владельцем домена/сертификата, а не с посредником).",{"type":698,"tag":699,"props":821,"children":822},{},[823],{"type":703,"value":824},"В типичном браузерном сценарии TLS аутентифицирует сервер через цепочку сертификатов, а клиент чаще всего не аутентифицируется сертификатом (если не используется mTLS).",{"type":698,"tag":699,"props":826,"children":827},{},[828],{"type":703,"value":829},"После установления TLS-канала HTTP-запросы и ответы передаются как зашифрованные данные приложения, поэтому злоумышленник “на пути” (в публичном Wi‑Fi, у провайдера, на промежуточном маршрутизаторе) не должен иметь возможности читать или незаметно изменять содержимое обмена.",{"type":698,"tag":699,"props":831,"children":832},{},[833],{"type":703,"value":834},"Схема (упрощённо):",{"type":698,"tag":836,"props":837,"children":841},"pre",{"className":838,"code":840,"language":703},[839],"language-text","браузер\n  HTTP запрос/ответ\n    ↓ (упаковка)\n  TLS (шифрование, проверка сертификата)\n    ↓\n  TCP/QUIC транспорт\n    ↓\nсервер\n",[842],{"type":698,"tag":714,"props":843,"children":845},{"__ignoreMap":844},"",[846],{"type":703,"value":840},{"data":848,"body":849},{},{"type":695,"children":850},[851],{"type":698,"tag":699,"props":852,"children":853},{},[854],{"type":703,"value":25},{"data":856,"body":857},{},{"type":695,"children":858},[859,864,869],{"type":698,"tag":699,"props":860,"children":861},{},[862],{"type":703,"value":863},"HTTPS не гарантирует, что сайт “хороший” или заслуживает доверия: фишинговый сайт может иметь корректный сертификат и работать по HTTPS, а введённые данные будут украдены самим сайтом (то есть конечной точкой, а не атакующим “в дороге”).",{"type":698,"tag":699,"props":865,"children":866},{},[867],{"type":703,"value":868},"HTTPS не устраняет уязвимости веб‑приложения: при наличии XSS/CSRF/уязвимостей логики, ошибок авторизации или утечек токенов безопасный транспорт не препятствует атаке, потому что вредоносные действия выполняются “легально” в рамках установленного соединения.",{"type":698,"tag":699,"props":870,"children":871},{},[872],{"type":703,"value":873},"HTTPS не защищает от компрометации сервера или цепочки поставки (внедрение вредоносного кода в сборку, подмена зависимости, компрометация CDN): TLS корректно доставит вредоносный JavaScript пользователю, просто в зашифрованном виде.",{"data":875,"body":876},{},{"type":695,"children":877},[878],{"type":698,"tag":699,"props":879,"children":880},{},[881],{"type":703,"value":36},{"data":883,"body":884},{},{"type":695,"children":885},[886,891,912,917,922],{"type":698,"tag":699,"props":887,"children":888},{},[889],{"type":703,"value":890},"Смешанный контент — ситуация, когда HTML загружается по HTTPS, но часть ресурсов подгружается по HTTP; тогда злоумышленник на сети может подменить эти ресурсы и повлиять на страницу, несмотря на HTTPS у основного документа.",{"type":698,"tag":699,"props":892,"children":893},{},[894,896,902,904,910],{"type":703,"value":895},"Активный смешанный контент (например, скрипты и таблицы стилей) наиболее опасен: подмена ",{"type":698,"tag":714,"props":897,"children":899},{"className":898},[],[900],{"type":703,"value":901},"script",{"type":703,"value":903}," или ",{"type":698,"tag":714,"props":905,"children":907},{"className":906},[],[908],{"type":703,"value":909},"stylesheet",{"type":703,"value":911}," часто приводит к полному захвату страницы (кража токенов/куки, подмена форм, внедрение редиректов), поэтому браузеры стремятся блокировать такие загрузки.",{"type":698,"tag":699,"props":913,"children":914},{},[915],{"type":703,"value":916},"Пассивный смешанный контент (например, изображения) обычно менее критичен, но всё равно нарушает целостность контента и может использоваться для обмана пользователя (подмена “скриншота интерфейса”, кнопок на баннере и т. п.).",{"type":698,"tag":699,"props":918,"children":919},{},[920],{"type":703,"value":921},"Мини-таблица: ресурс по HTTP внутри HTTPS-страницы",{"type":698,"tag":923,"props":924,"children":925},"table",{},[926,950],{"type":698,"tag":927,"props":928,"children":929},"thead",{},[930],{"type":698,"tag":931,"props":932,"children":933},"tr",{},[934,940,945],{"type":698,"tag":935,"props":936,"children":937},"th",{},[938],{"type":703,"value":939},"Ресурс",{"type":698,"tag":935,"props":941,"children":942},{},[943],{"type":703,"value":944},"Почему опасно",{"type":698,"tag":935,"props":946,"children":947},{},[948],{"type":703,"value":949},"Типичный эффект",{"type":698,"tag":951,"props":952,"children":953},"tbody",{},[954,983],{"type":698,"tag":931,"props":955,"children":956},{},[957,973,978],{"type":698,"tag":958,"props":959,"children":960},"td",{},[961,966,968],{"type":698,"tag":714,"props":962,"children":964},{"className":963},[],[965],{"type":703,"value":901},{"type":703,"value":967}," / ",{"type":698,"tag":714,"props":969,"children":971},{"className":970},[],[972],{"type":703,"value":909},{"type":698,"tag":958,"props":974,"children":975},{},[976],{"type":703,"value":977},"Влияет на логику и DOM",{"type":698,"tag":958,"props":979,"children":980},{},[981],{"type":703,"value":982},"Кража данных, подмена форм, редиректы, внедрение трекеров",{"type":698,"tag":931,"props":984,"children":985},{},[986,1002,1007],{"type":698,"tag":958,"props":987,"children":988},{},[989,995,996],{"type":698,"tag":714,"props":990,"children":992},{"className":991},[],[993],{"type":703,"value":994},"img",{"type":703,"value":967},{"type":698,"tag":714,"props":997,"children":999},{"className":998},[],[1000],{"type":703,"value":1001},"video",{"type":698,"tag":958,"props":1003,"children":1004},{},[1005],{"type":703,"value":1006},"Влияет на отображаемый контент",{"type":698,"tag":958,"props":1008,"children":1009},{},[1010],{"type":703,"value":1011},"Подмена визуальных доказательств, обман, деградация доверия",{"data":1013,"body":1014},{},{"type":695,"children":1015},[1016,1021],{"type":698,"tag":699,"props":1017,"children":1018},{},[1019],{"type":703,"value":1020},"Политика “всё по HTTPS” относится ко всей цепочке: достаточно одного HTTP-редиректа, одного HTTP-ресурса или одного незашифрованного API‑вызова, чтобы снова появился вектор MITM и подмена данных.",{"type":698,"tag":699,"props":1022,"children":1023},{},[1024],{"type":703,"value":1025},"Частая ошибка — считать, что “главная страница по HTTPS, значит достаточно”, хотя критичные данные могут уходить через сторонние скрипты, аналитические пиксели, устаревшие эндпоинты или редиректы.",{"data":1027,"body":1028},{},{"type":695,"children":1029},[1030,1043,1062],{"type":698,"tag":699,"props":1031,"children":1032},{},[1033,1035,1041],{"type":703,"value":1034},"HSTS — механизм, при котором сервер сообщает браузеру, что к домену следует обращаться только по HTTPS, используя заголовок ",{"type":698,"tag":714,"props":1036,"children":1038},{"className":1037},[],[1039],{"type":703,"value":1040},"Strict-Transport-Security",{"type":703,"value":1042},".",{"type":698,"tag":699,"props":1044,"children":1045},{},[1046,1048,1053,1055,1060],{"type":703,"value":1047},"При активном HSTS браузер обычно автоматически переводит будущие попытки открыть ",{"type":698,"tag":714,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":703,"value":719},{"type":703,"value":1054}," на ",{"type":698,"tag":714,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":703,"value":744},{"type":703,"value":1061}," и жёстче относится к ошибкам TLS (снижается риск “принудительного отката” на HTTP через атаки на первой загрузке/редиректах).",{"type":698,"tag":699,"props":1063,"children":1064},{},[1065,1067],{"type":703,"value":1066},"Пример заголовка (типовой):\n",{"type":698,"tag":714,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":703,"value":1072},"Strict-Transport-Security: max-age=31536000; includeSubDomains",{"data":1074,"body":1075},{},{"type":695,"children":1076},[1077],{"type":698,"tag":699,"props":1078,"children":1079},{},[1080],{"type":703,"value":64},{"data":1082,"body":1083},{},{"type":695,"children":1084},[1085],{"type":698,"tag":699,"props":1086,"children":1087},{},[1088,1093],{"type":698,"tag":771,"props":1089,"children":1090},{},[1091],{"type":703,"value":1092},"Короткий ответ",{"type":703,"value":1094},": HTTPS (TLS) защищает канал передачи (конфиденциальность, целостность, аутентификация сервера), но не гарантирует безопасность сайта как приложения; при оценке “защищено ли” необходимо учитывать фишинг, компрометацию сервера, уязвимости (например, XSS) и проблемы смешанного контента, а также применять механизмы вроде HSTS.",1775735659094]