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
임의 입력에 영향을 줄 수 있는 능력이 있는 공격자가 이를 사용하여 임의 코드를 얻을 수 있으므로 이러한 방식으로 사용하면 보안 문제가 발생할 수 있습니다. 스크립트를 실행하는 시스템에서.