# Внедрение скриптов

Общие сведения о рисках безопасности, связанных с внедрением скриптов и GitHub Actions рабочими процессами.

## Осознание риска внедрения скриптов

При создании рабочих процессов, \[пользовательских действий и [составных действий](/ru/enterprise-server@3.22/actions/concepts/workflows-and-actions/custom-actions)]\(/actions/tutorials/create-actions/create-a-composite-action) следует всегда учитывать, может ли код выполнять ненадежные входные данные от злоумышленников. Это может произойти, когда злоумышленник добавляет в контекст вредоносные команды и сценарии. При запуске рабочего процесса эти строки могут быть интерпретированы как код, который затем выполняется в средстве выполнения тестов.

Злоумышленники могут добавлять собственное вредоносное содержимое в [`github`контекст](/ru/enterprise-server@3.22/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`.

Следует убедиться, что эти значения не передаются непосредственно в рабочие процессы, действия, вызовы API или куда-либо еще, где они могут быть интерпретированы как исполняемый код. Применяя ту же оборонительную позицию программирования, которую вы будете использовать для любого другого кода привилегированного приложения, вы можете помочь в обеспечении безопасности использования GitHub Actions. Сведения о некоторых шагах, которые может предпринять злоумышленник, см. в разделе [Справочник по безопасному использованию](/ru/enterprise-server@3.22/actions/reference/security/secure-use).

Кроме того, существуют и другие менее очевидные источники потенциально ненадежных входных данных, такие как имена ветвей и адреса электронной почты, которые могут быть весьма гибкими с точки зрения разрешенного содержания. Например, `zzz";echo${IFS}"hello";#` будет допустимым именем ветви и возможным вектором атаки на целевой репозиторий.

В следующих разделах показано, как снизить риск внедрения скриптов.

### Пример атаки путем внедрения сценария

Атака путем внедрения сценария может произойти непосредственно во встроенном сценарии рабочего процесса. В следующем примере действие использует выражение для проверки достоверности заголовка запроса на вытягивание, но также добавляет риск внедрения сценария:

```yaml
      - name: Check PR title
        run: |
          title="${{ github.event.pull_request.title }}"
          if [[ $title =~ ^octocat ]]; then
          echo "PR title starts with 'octocat'"
          exit 0
          else
          echo "PR title did not start with 'octocat'"
          exit 1
          fi
```

Этот пример уязвим для внедрения сценария, так как команда `run` выполняется во временном сценарии оболочки в средстве выполнения тестов. Перед запуском скрипта оболочки вычисляются выражения внутри `${{ }}` , а затем заменяются результируемыми значениями, что может сделать его уязвимым для внедрения команд оболочки.

Чтобы внедрить команды в этот рабочий процесс, злоумышленник может создать запрос на вытягивание с заголовком `a"; ls $GITHUB_WORKSPACE"`:

![Снимок экрана: заголовок запроса на вытягивание в режиме редактирования. В поле введен новый заголовок: a"; ls $GITHUB\_WORKSPACE".](/assets/images/help/actions/example-script-injection-pr-title.png)

В этом примере `"` символ используется для прерывания`title="${{ github.event.pull_request.title }}"`инструкции, что позволяет `ls` выполнять команду в средстве выполнения. Вы увидите выходные данные команды `ls` в журнале:

```shell
Run title="a"; ls $GITHUB_WORKSPACE""
README.md
code.yml
example.js
```

Рекомендации по обеспечению безопасности средств выполнения см. в разделе [Справочник по безопасному использованию](/ru/enterprise-server@3.22/actions/reference/security/secure-use#good-practices-for-mitigating-script-injection-attacks).