W języku programowania wykonuję proste polecenie powłoki
cd var; echo > create_a_file_here
z var jest zmienną, która zawiera ciąg (miejmy nadzieję) katalogu do miejsca, gdzie chcę, aby utworzyć plik „create_a_file_here”. Teraz, jeśli ktoś zobaczy ten wiersz kodu, można go wykorzystać, przypisując na przykład:
var = "; rm -rf /"
Sprawy mogą być dość brzydkie. Jednym ze sposobów uniknięcia powyższego przypadku może być przeszukanie ciągu w var dla znaków specjalnych, takich jak „;” przed wykonaniem polecenia powłoki, ale wątpię, czy obejmuje to wszystkie możliwe exploity.
Czy ktoś zna dobry sposób na to, aby „cd var” zmieniał tylko katalog i nic więcej?
sh, czy tworzysz własny język programowania z podobną składnią, ale który rozwija się varzamiast wymagać pisania cd "$var"? Czy to jest bashz shopt -s cdable_vars? Och, myślę, że masz na myśli, że jakiś inny program prosi powłokę o uruchomienie tych poleceń. Więc po prostu zacytuj var, ale upewnij się, że nie zawiera on samego znaku cudzysłowu ...
s='"'; echo "$s"odbitki ".
var=untrusted stringw programie nadrzędnym, podobnie varjak zmienna środowiskowa, która jest już ustawiona podczas wywoływania sh. Następnie musisz go zacytować za każdym razem, gdy go rozszerzysz, co można zrobić niezawodnie. Ach, widzę, że ten pomysł jest już częścią odpowiedzi Stéphane>. <
varjako argument. Na przykład dzwoniącshz argumentami-c,'cd "$1"; echo > create_a_file_here','sh',varroboty i nie wymaga żadnych zmianvar.'sh'Argumentem jest przekazywana jako$0.