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
]

関連情報