GiitHub Actions의 Commiit Message Injection

3134 단어 GitHubActionsGitHub
KINTO Technologies Advent Calendar 2021 - Qiita 다음 날 보도입니다.
날과 씨
GiitHub의 복제품push를 GiitHub Actions에서 구축을 실행하고 결과를 Slack에 알리는 경우가 많다고 생각했는데 한 번은 특정한 제출만 건물이 떨어지는 현상을 겪었다.
GiitHub Actions 로그를 찾아봤는데 슬랙의 API를 두드리다가 떨어진 것 같아요.
- name: Slack Notification
  run: |
    jq -n '{
      username: "${{ github.event.repository.name }} ",
      attachments: [
        {
          "author_name": "${{ github.actor }}",
          "author_icon": "${{ github.event.sender.avatar_url }}",
          "title": ${{ github.event.head_commit.message }}
        }
      ]
    }' | curl -H 'Content-Type: application/json' -d @- ${{ secrets.SLACK_WEBHOOK_URL }}
나는 단지 jq 명령으로 요청 데이터를 만들고curl 명령으로 메일을 보낼 뿐이다.그러나 제출 메시지에 특수 기호가 포함되면 jq 명령이 잘못되어 구축이 떨어진 것 같습니다.
여기서 갑자기 제출 메시지를 슬랙 API 요청으로 바꾸면 삽입할 수 있지 않을까요?이렇게 생각하면서 다음처럼 요청을 다시 쓰고 실행하면 성공적으로 주음을 할 수 있다니!
Commit Message Injection", title_link: "https://www.kinto-technologies.com/
그러니 위성부터 처리합시다.
대응
jq 명령에 --arg 옵션이 있습니다. 이 옵션을 사용하십시오. 
(추가: --arg a v set variable $a to value <v>;jq명령의 첫 줄을 jq -n --arg msg "${{ github.event.head_commit.message }}로 바꾸고, ${{ github.event.head_commit.message }}의 줄을 $msg로 바꾸다.
- name: Slack Notification
  run: |
    jq -n --arg msg "${{ github.event.head_commit.message }} '{
      username: "${{ github.event.repository.name }} ",
      attachments: [
        {
          "author_name": "${{ github.actor }}",
          "author_icon": "${{ github.event.sender.avatar_url }}",
          "title": $msg
        }
      ]
    }' | curl -H 'Content-Type: application/json' -d @- ${{ secrets.SLACK_WEBHOOK_URL }}
따라서 제출 메시지는 문자열로 처리되고 안전하게 제출 메시지가 슬랙에 전송됩니다.
자사는 도요타 자동차 지사인 킨토 등의 기획·개발을 진행하고 있으며 엔지니어를 모집 중이다.
웹 페이지 정보

좋은 웹페이지 즐겨찾기