{"meta":{"title":"Поиск и исправление первой уязвимости кода","intro":"Изучите основы защиты кода, разрешив оповещение code scanning в демо-репозитории.","product":"Начало работы","breadcrumbs":[{"href":"/ru/get-started","title":"Начало работы"},{"href":"/ru/get-started/learning-to-code","title":"Узнайте, как кодировать"},{"href":"/ru/get-started/learning-to-code/finding-and-fixing-your-first-code-vulnerability","title":"Защита кода"}],"documentType":"article"},"body":"# Поиск и исправление первой уязвимости кода\n\nИзучите основы защиты кода, разрешив оповещение code scanning в демо-репозитории.\n\nПри обучении коду обычно случайно вводить уязвимости в проекты. Если эти проблемы безопасности не устранены перед предоставлением общего доступа к работе, злоумышленники могут использовать их для управления кодом и доступа к конфиденциальным данным, поэтому важно определить и исправить их как можно скорее.\n\nК счастью, существуют такие инструменты code scanning , которые автоматически находят, объясняют и даже исправляют уязвимости в ваших публичных репозиториях. В этом уроке вы научитесь сохранять безопасность своей работы с code scanningпомощью .\n\n## Настройка демонстрационного репозитория\n\nДавайте приступим к работе с вилкой демонстрационного проекта с уязвимостью безопасности. Этот проект создает простую веб-страницу, но так как мы не развернем проект, **в этом упражнении отсутствует риск** безопасности.\n\n1. Перейдите в репозиторий [`new2code/code-scanning-demo`](https://github.com/new2code/code-scanning-demo) .\n2. В правом верхнем углу страницы нажмите <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-repo-forked\" aria-label=\"repo forked icon\" role=\"img\"><path d=\"M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z\"></path></svg>**«Форк**».\n3. На появившемся экране нажмите кнопку **\"Создать вилку**\".\n\n## Поиск уязвимостей в коде\n\nТеперь, когда мы настроили проект, давайте включим code scanning форк, чтобы проверить уязвимости в коде.\n\n1. Вернувшись на GitHub, на главной странице вашего репозитория, нажмите **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-shield\" aria-label=\"shield\" role=\"img\"><path d=\"M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path></svg> Security and quality**.\n2. В строке «Code scanning уведомления» нажмите **Настроить code scanning**.\n3. В разделе «Инструменты» рядом с «CodeQL анализом» выберите **«Настройка**», затем нажмите **«По умолчанию**».\n4. В всплывающем окне нажмите **Включить CodeQL**. Это запустит GitHub Actions рабочий процесс, который сканирует ваш код на наличие уязвимостей.\n5. Чтобы проверить статус вашего рабочего процесса, в панели навигации нажмите <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play icon\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg>**«Действия».**\n6. Когда рабочий процесс завершён, в панели навигации нажмите **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-shield\" aria-label=\"shield\" role=\"img\"><path d=\"M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"></path></svg> Security and quality**.\n7. Чтобы просмотреть code scanning уведомление, обнаруженное рабочим процессом, в боковой навигации нажмите <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-codescan\" aria-label=\"codescan icon\" role=\"img\"><path d=\"M8.47 4.97a.75.75 0 0 0 0 1.06L9.94 7.5 8.47 8.97a.75.75 0 1 0 1.06 1.06l2-2a.75.75 0 0 0 0-1.06l-2-2a.75.75 0 0 0-1.06 0ZM6.53 6.03a.75.75 0 0 0-1.06-1.06l-2 2a.75.75 0 0 0 0 1.06l2 2a.75.75 0 1 0 1.06-1.06L5.06 7.5l1.47-1.47Z\"></path><path d=\"M12.246 13.307a7.501 7.501 0 1 1 1.06-1.06l2.474 2.473a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM1.5 7.5a6.002 6.002 0 0 0 3.608 5.504 6.002 6.002 0 0 0 6.486-1.117.748.748 0 0 1 .292-.293A6 6 0 1 0 1.5 7.5Z\"></path></svg>**Code scanning**, затем **нажмите Отражённое кросс-сайтовое скриптирование**.\n\n## Понимание code scanning предупреждения\n\nТеперь, когда code scanning обнаружена уязвимость в коде, давайте разберём информацию, предоставленную в оповещении.\n\n### Расположение\n\nВ оповещении отображается небольшая предварительная версия файла, в центре строк кода, создающих уязвимость. В нашем случае уязвимость обнаруживается в строке 8 файла `index.js` , где мы реализуем предоставленные пользователем входные данные на нашем сайте.\n\nЕсли мы рассмотрим более подробный взгляд, мы можем увидеть, что базовая проблема возникает в строке 7, когда мы назначаем `greet` входные данные пользователя без проверки вредоносного кода. Чтобы просмотреть пошаговые представления уязвимости в нашем коде, в выноске под уязвимыми линиями нажмите кнопку **\"Показать пути**\".\n\n![Снимок экрана: расположение оповещения code scanning. Кнопка \"Показать пути\" выделена оранжевым цветом.](/assets/images/help/repository/code-scanning-alert-location-learners.png)\n\n### Описание и рекомендация\n\nПод предварительным просмотром файла code scanning приведено более подробное описание уязвимости. Чтобы увидеть рекомендуемое исправление, а также примеры уязвимого и исправленного кода, нажмите **«Показать больше**<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-chevron-down\" aria-label=\"chevron down icon\" role=\"img\"><path d=\"M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z\"></path></svg>».\n\n![Снимок экрана: сведения о оповещении code scanning. Раскрывающийся список с надписью \"Показать больше\" описывается оранжевым цветом.](/assets/images/help/repository/code-scanning-alert-details-learners.png)\n\nВ нашем случае рекомендация заключается в очистке входных данных пользователей перед его использованием. Это означает, что необходимо проверить входные данные для вредоносного кода, а затем очистить его при необходимости.\n\n> \\[!TIP] Если вы не совсем понимаете, как рекомендуется, [попробуйте спросить Copilot Chat](https://github.com/copilot) объяснение.\n\n### Временная шкала\n\nНаконец, можно увидеть временную шкалу оповещения в нижней части страницы. Наша временная шкала содержит фиксацию, в которой обнаружена уязвимость, и автоматически обновляется при исправлении уязвимости.\n\n![Снимок экрана: временная шкала для оповещения code scanning.](/assets/images/help/repository/code-scanning-alert-timeline-learners.png)\n\n## Автоматическое исправление уязвимости\n\nЧтобы быстро и легко обеспечить безопасность нашего проекта, давайте используем GitHub Copilot Autofix для code scanning.\n\n1. Под заголовком оповещения, в поле с предложением «Ускорить устранение этого оповещения с Copilot Autofix помощью для CodeQL», нажмите <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-shield-check\" aria-label=\"shield check icon\" role=\"img\"><path d=\"m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z\"></path></svg>**Generate fix**.\n2. После Copilot генерации предложения исправления оно описывает предлагаемые изменения, отображает предварительный просмотр изменений и выявляет любые добавленные зависимости. Уделите минуту, чтобы прочитать Copilotработу .\n3. Чтобы создать запрос на вытягивание с исправлением, нажмите кнопку **\"Зафиксировать в новую ветвь**\", а затем нажмите кнопку **\"Зафиксировать изменение**\".\n4. После создания запроса на вытягивание черновика в нижней части страницы нажмите кнопку **\"Готово к просмотру** \", чтобы сделать его слиянием.\n5. Чтобы применить исправление, нажмите кнопку **\"Объединить запрос** на вытягивание\", а затем нажмите кнопку **\"Подтвердить слияние**\".\n\n   После слияния pull-запроса и повторного code scanning запуска рабочего процесса оповещение автоматически закроется, а фиксация, исправляющая уязвимость, будет добавлена на таймлайн.\n\n> \\[!NOTE] В реальных проектах всегда стоит просматривать предлагаемые Copilot изменения, прежде чем фиксировать их в коде.\n\n## Следующие шаги\n\nТеперь, когда вы попробовали code scanning демо-репозиторий, **включите его в своих проектах** , чтобы быстро находить и исправлять текущие и будущие уязвимости.\n\nТеперь, когда вы обеспечили код, который вы написали самостоятельно, выполните следующий шаг к безопасному коду, проверив безопасность **зависимостей**. См [. раздел AUTOTITLE](/ru/get-started/learning-to-code/finding-and-fixing-your-first-dependency-vulnerability)."}