여유 로드를 사용자 정의하는 방법

여유 로드를 사용자 정의하는 방법

Slack을 내 쉘 스크립트 중 하나와 통합하려고 합니다. 조건이 다르고 페이로드의 메시지 부분이 다릅니다.

내 스크립트는 다음과 같습니다

#!/bin/bash

SLACK_URL='https://hooks.slack.com/services/******
CHANNEL="#channel"
PAYLOAD="'payload={\"channel\": \"${SLACK_CHANNEL}\", \"username\": \"${USER}\", \"text\": \"$MESSAGE\", \"icon_emoji\": \":slack:\"}"

사례 1: 조건:

 curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

사례 2: 조건

  curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

사례 3: 조건

  curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

각각의 경우에 내 메시지는 달라야 합니다. 저는 매번 사용자 정의 메시지로 페이로드를 선언하는 것을 피하려고 노력하고 있으며 사용자 정의 메시지를 페이로드로 구문 분석할 수 있는 옵션을 찾고 있습니다. 도와주세요.

답변1

$PAYLOAD자신만의 조건에 따라 하나씩 구성할 수 있습니다.

PAYLOAD="payload={"
PAYLOAD="$PAYLOAD\"channel\": \"${SLACK_CHANNEL}\","
PAYLOAD="$PAYLOAD\"username\": \"${USER}\","

case $MESSAGE_TYPE in
    1)
        PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE1\","
        ;;
    2)
        PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE2\","
        ;;
    3)
        PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE3\","
        ;;
esac

PAYLOAD="$PAYLOAD \"icon_emoji\": \":slack:\""
PAYLOAD="$PAYLOAD}"

curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

또는 올바르게 설정한 후 Bash 지연 평가를 수행할 수 있습니다 $PAYLOAD.eval$MESSAGE

PAYLOAD_PATTERN='payload={\"channel\": \"${SLACK_CHANNEL}\", \"username\": \"${USER}\", \"text\": \"$MESSAGE\", \"icon_emoji\": \":slack:\"}'
MESSAGE=...
eval "PAYLOAD=\"$PAYLOAD_PATTERN\""

curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

이는 쉘 프로그래밍의 일반적인 패턴입니다. 그러나 $PAYLOAD_PATTERN신뢰할 수 없는 입력의 일부를 포함하도록 변수의 일부를 확장하는 경우 eval임의 입력에 영향을 줄 수 있는 능력이 있는 공격자가 이를 사용하여 임의 코드를 얻을 수 있으므로 이러한 방식으로 사용하면 보안 문제가 발생할 수 있습니다. 스크립트를 실행하는 시스템에서.

관련 정보