空き負荷をカスタマイズする方法

空き負荷をカスタマイズする方法

Slackを私のシェルスクリプトの1つと統合しようとしています。条件が異なり、ペイロードのメッセージ部分が異なります。

私のスクリプトは次のとおりです

#!/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独自の条件に応じて1つずつ構成できます。

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遅延評価を実行できます$PAYLOADeval$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入力に影響を与える可能性のある攻撃者がそれを使用して任意のコードを取得する可能性があるため、この方法で使用するとセキュリティ上の問題が発生する可能性があります。 。スクリプトを実行するシステムで。

関連情報