{"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/concepts/workflows-and-actions/custom-actions)]\\(/actions/tutorials/create-actions/create-a-composite-action) следует всегда учитывать, может ли код выполнять ненадежные входные данные от злоумышленников. Это может произойти, когда злоумышленник добавляет в контекст вредоносные команды и сценарии. При запуске рабочего процесса эти строки могут быть интерпретированы как код, который затем выполняется в средстве выполнения тестов.\n\nЗлоумышленники могут добавлять собственное вредоносное содержимое в [`github`контекст](/ru/actions/reference/workflows-and-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/reference/security/secure-use).\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/security/secure-use#good-practices-for-mitigating-script-injection-attacks)."}