{"meta":{"title":"Внедрение скриптов","intro":"Ознакомьтесь с рисками безопасности, связанными с внедрением скриптов, и рабочими процессами GitHub Actions .","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/concepts","title":"Основные понятия"},{"href":"/ru/actions/concepts/security","title":"Безопасность"},{"href":"/ru/actions/concepts/security/script-injections","title":"Внедрение скриптов"}],"documentType":"article"},"body":"# Внедрение скриптов\n\nОзнакомьтесь с рисками безопасности, связанными с внедрением скриптов, и рабочими процессами GitHub Actions .\n\n## Осознание риска внедрения скриптов\n\nПри создании рабочих процессов, \\[пользовательских действий и [составных действий](/ru/actions/creating-actions/about-custom-actions)]\\(/actions/creating-actions/creating-a-composite-action) следует всегда учитывать, может ли код выполнять ненадежные входные данные от злоумышленников. Это может произойти, когда злоумышленник добавляет в контекст вредоносные команды и сценарии. При запуске рабочего процесса эти строки могут быть интерпретированы как код, который затем выполняется в средстве выполнения тестов.\n\nЗлоумышленники могут добавлять собственное вредоносное содержимое в [`github`контекст](/ru/actions/learn-github-actions/contexts#github-context), что следует рассматривать как потенциально ненадежные входные данные. Эти контексты обычно заканчиваются на `body`, `default_branch`, `email`, `head_ref`, `label`, `message`, `name`, `page_name`,`ref` и `title`. Например, `github.event.issue.title` или `github.event.pull_request.body`.\n\nСледует убедиться, что эти значения не передаются непосредственно в рабочие процессы, действия, вызовы API или куда-либо еще, где они могут быть интерпретированы как исполняемый код. Применяя ту же защитную позицию программирования, которую вы бы использовали для любого другого кода привилегированного приложения, вы можете помочь системе безопасности усилить использование GitHub Actions. Сведения о некоторых шагах, которые может предпринять злоумышленник, см. в разделе [Справочник по безопасному использованию](/ru/actions/security-guides/security-hardening-for-github-actions#potential-impact-of-a-compromised-runner).\n\nКроме того, существуют и другие менее очевидные источники потенциально ненадежных входных данных, такие как имена ветвей и адреса электронной почты, которые могут быть весьма гибкими с точки зрения разрешенного содержания. Например, `zzz\";echo${IFS}\"hello\";#` будет допустимым именем ветви и возможным вектором атаки на целевой репозиторий.\n\nВ следующих разделах показано, как снизить риск внедрения скриптов.\n\n### Пример атаки путем внедрения сценария\n\nАтака путем внедрения сценария может произойти непосредственно во встроенном сценарии рабочего процесса. В следующем примере действие использует выражение для проверки достоверности заголовка запроса на вытягивание, но также добавляет риск внедрения сценария:\n\n```yaml\n      - name: Check PR title\n        run: |\n          title=\"${{ github.event.pull_request.title }}\"\n          if [[ $title =~ ^octocat ]]; then\n          echo \"PR title starts with 'octocat'\"\n          exit 0\n          else\n          echo \"PR title did not start with 'octocat'\"\n          exit 1\n          fi\n```\n\nЭтот пример уязвим для внедрения сценария, так как команда `run` выполняется во временном сценарии оболочки в средстве выполнения тестов. Перед запуском сценария оболочки выражения внутри `${{ }}` оцениваются, а затем заменяются полученными значениями, что может сделать сценарий уязвимым для внедрения команд оболочки.\n\nЧтобы внедрить команды в этот рабочий процесс, злоумышленник может создать запрос на вытягивание с заголовком `a\"; ls $GITHUB_WORKSPACE\"`:\n\n![Снимок экрана: заголовок запроса на вытягивание в режиме редактирования. В поле введен новый заголовок: a\"; ls $GITHUB\\_WORKSPACE\".](/assets/images/help/actions/example-script-injection-pr-title.png)\n\nВ этом примере символ `\"` используется для прерывания инструкции `title=\"${{ github.event.pull_request.title }}\"`, позволяя выполнять команду `ls` в средстве выполнения. Вы увидите выходные данные команды `ls` в журнале:\n\n```shell\nRun title=\"a\"; ls $GITHUB_WORKSPACE\"\"\nREADME.md\ncode.yml\nexample.js\n```\n\nРекомендации по обеспечению безопасности средств выполнения см. в разделе [Справочник по безопасному использованию](/ru/actions/reference/secure-use-reference#good-practices-for-mitigating-script-injection-attacks)."}