Curl을 사용하여 보낼 JSON 정리

Curl을 사용하여 보낼 JSON 정리

일부 사용자 입력이 포함된 JSON 페이로드를 사용하여 일부 서비스에 POST 요청을 보내야 합니다. 주입 공격을 방지하려면 이 입력 변수를 JSON으로 인코딩해야 합니다.

요청을 보내고 응답 JSON을 RESP 변수로 구문 분석하는 코드 예:

RESP=`curl --connect-timeout "10" -s -H "Content-Type: application/json" \
        -X POST -d '{ "Attribute": '"'$USERINPUT'" }',\
        $ENDPOINT | $JQ -r '.key'`

$USERINPUTJSON 페이로드를 생성하기 전에 JSON을 삭제하거나 인코딩하는 방법은 무엇입니까?

답변1

사용jo유틸리티, 정리된 JSON 문서는 다음을 사용하여 구축할 수 있습니다.

data=$( jo Attribute="$USERINPUT" )

-d "$data"그런 다음 with를 사용하여 curl엔드포인트에 전달할 수 있습니다 .


이전 (그러나 여전히 유효한) 답변은 jq대신 다음을 사용합니다 jo.

사용jq:

USERINPUT=$'a e""R<*&\04\n\thello!\''

문자열에는 몇 개의 큰따옴표, EOT 문자, 개행 문자, 탭 문자, 작은따옴표 및 일부 일반 텍스트가 있습니다.

data="$( jq -nc --arg Attribute "$USERINPUT" '$ARGS.named' )"

이는 사용자 데이터를 개별 필드 값으로 포함하는 JSON 개체를 구축합니다 Attribute.

이것으로부터 우리는 다음을 얻습니다.

{"Attribute":"ae\"\"R<*&\u0004\n\thello!'"}

의 값으로 $data.

이제 통화 가능 curl:

RESP="$( curl --connect-timeout "10" -s \
           -H "Content-Type: application/json" \
           -X POST -d "$data" \
           "$ENDPOINT" | jq -r '.key' )"

답변2

명령줄에서 Python 모듈 json.tool을 사용하여 JSON을 구문 분석할 수 있습니다.

export USERINPUT="[1,2,3]"
echo $USERINPUT| python -mjson.tool
[
    1,
    2,
    3
]

관련 정보