POSTリクエストをjsonペイロードを使用してサービスに送信する必要があり、ユーザー入力が含まれています。インジェクション攻撃を防ぐには、その入力変数をJsonでエンコードする必要があります。
リクエストを送信し、レスポンスjsonをRESP変数に解析するコード例:
RESP=`curl --connect-timeout "10" -s -H "Content-Type: application/json" \
-X POST -d '{ "Attribute": '"'$USERINPUT'" }',\
$ENDPOINT | $JQ -r '.key'`
jsonペイロードを作成する前に$ USERINPUTをサニタイズまたはjsonエンコードする方法
jq
を使用:
USERINPUT=$'a e""R<*&\04\n\thello!\''
この文字列には、いくつかの通常のテキストに加えて、いくつかの二重引用符、EOT文字、改行、タブ、および一重引用符が含まれています。
data="$( jq --null-input --compact-output --arg str "$USERINPUT" '{"Attribute": $str}' )"
これにより、ユーザーデータを含むJSONオブジェクトが、唯一のAttribute
フィールドの値として作成されます。
短いオプションを使用して同じこと:
data="$( jq -nc --arg str "$USERINPUT" '{"Attribute": $str}' )"
これから私たちは
{"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' )"
コマンドラインからPythonモジュールjson.toolを使用して、JSONを解析できます。
export USERINPUT="[1,2,3]"
echo $USERINPUT| python -mjson.tool
[
1,
2,
3
]