GitHub Actionsのインラインシェルスクリプト実行時に環境変数をそのまま渡さないようにする(中間環境変数を使うようにする)

以下ページに書いてた内容をメモ。

https://docs.github.com/ja/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable

たとえば、👇️のように書くとプルリクのタイトルを出力できるGitHub Actionsになります。

name: Contexts
on: push
  jobs:
    print:
    runs-on: ubuntu-latest
      steps:
      - run: echo "${{ github.event.pull_request.title }}"

ただ、プルリクのタイトルに「some; rm -rf *」のような文字列が含まれたとすると、rm -rf *という最悪のコマンドが実行されることになります(GitHub Actions上で実行されたところで別の問題はないですがあくまで「そういうことも起こり得ますよね」的な意味です)。

こういうとき、👇️のようにクォートで囲むと、ただの文字列として安全に処理できます。

name: Intermediate environment variables
on: push
jobs:
  print:
    runs-on: ubuntu-latest
    env:
      TITLE: ${{  github.event.pull_request.title }} # コンテキストの値を環境変数へセット
    steps:
      - run: echo "${TITLE}"     # 環境変数経由でコンテキストのプロパティを参照

というかこれはGitHub Actionsの話というより、シェルスクリプトの話です。

たとえば、👇️のように書くと、シェルはmy file*内の空白や*を特別な意味で解釈し、もし現在のディレクトリにmy file1my file2といったファイルがあれば、echo my file1 my file2となってしまいます。

FILENAME="my file*"
echo $FILENAME

こういうとき、クォートをつけると事故を防げます。

FILENAME="my file*"
echo "${FILENAME}"

おわり

Linux
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました