일부 사용자 입력이 포함된 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'`
$USERINPUT
JSON 페이로드를 생성하기 전에 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
]