Sanitize Json para enviar com Curl

2

Eu tenho que enviar uma solicitação POST para algum serviço com payload do json, e isso inclui alguma entrada do usuário. Essa variável de entrada precisa ser codificada em Json para evitar ataques de injeção.

Exemplo de código que envia solicitações e analisa a resposta json à variável RESP:

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

como se higienizar ou json codificar $ USERINPUT antes de criar json payload?

    
por Hrvoje Hudo 18.08.2016 / 17:43

2 respostas

4

Usando jq :

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

Esta string tem um par de aspas duplas, um caractere EOT, uma nova linha, uma tabulação e uma aspa simples, junto com algum texto comum.

data="$( jq --null-input --compact-output --arg str "$USERINPUT" '{"Attribute": $str}' )"

Isso cria um objeto JSON contendo os dados do usuário como o valor para o campo lone Attribute .

A mesma coisa usando opções curtas:

data="$( jq -nc --arg str "$USERINPUT" '{"Attribute": $str}' )"

A partir disso, obtemos

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

como o valor em $data .

Isso agora pode ser usado em sua chamada para curl :

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

Você pode usar o módulo json.tool do Python na linha de comando para analisar o JSON:

export USERINPUT="[1,2,3]"
echo $USERINPUT| python -mjson.tool
[
    1,
    2,
    3
]
    
por 21.10.2016 / 23:53

Tags