web-dev-qa-db-ja.com

Curlで送信するためのJsonのサニタイズ

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エンコードする方法

3
Hrvoje Hudo

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' )"
8
Kusalananda

コマンドラインからPythonモジュールjson.toolを使用して、JSONを解析できます。

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