l'espansione aritmetica bash sembra essere soggetta ad attacchi di iniezione


2

Supponiamo che tu voglia che lo script prenda le variabili dall'ambiente:

#!/usr/bin/env bash
set -eu

if (( ${A-} )); then
    echo true
else
    echo false
fi

Espansione aritmetica sembra essere più ragionevole qui per gestire (empty), 0, 1casi, oppure:

if [ "${A-}" ] && [ "${A-}" != 0 ]; then

Ma allora,

$ A='1 - 1' ./1.sh
false

Quindi ora puoi sostanzialmente cambiare le variabili, cosa che generalmente non vuoi consentire. Che cosa suggeriresti? Come elaborare flag booleani presi da variabili d'ambiente?

Risposte:


1

Se non sei sicuro che la variabile contenga un int, puoi convalidare il suo valore:

#!/usr/bin/env bash
set -eu

vint() {
    local v
    for v; do
        if echo "$v" | egrep '[^0-9]' &> /dev/null; then
            printf '%s: %s: not an int\n' "$0" "$v" >&2
            exit 1
        fi
    done
}

vint "${A-}"
if (( ${A-} )); then
    echo true
else
    echo false
fi

Questo è quanto potrei prenderlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.