Dalam bahasa pemrograman, saya menjalankan perintah shell sederhana
cd var; echo > create_a_file_here
dengan var menjadi variabel yang berisi string (semoga) direktori ke tempat di mana saya ingin membuat file "create_a_file_here". Sekarang jika seseorang melihat baris kode ini, dimungkinkan untuk mengeksploitasinya dengan menetapkan misalnya:
var = "; rm -rf /"
Segalanya bisa menjadi sangat jelek. Salah satu cara untuk menghindari kasus di atas adalah mungkin mencari string dalam var untuk beberapa karakter khusus seperti ';' sebelum menjalankan perintah shell, tetapi saya ragu ini mencakup semua kemungkinan exploit.
Adakah yang tahu cara yang baik untuk memastikan bahwa "cd var" hanya mengubah direktori dan tidak ada yang lain?
sh
, atau membuat bahasa pemrograman Anda sendiri dengan sintaksis yang sama tetapi yang berkembang var
bukannya mengharuskan Anda untuk menulis cd "$var"
? Atau bash
dengan ini shopt -s cdable_vars
? Oh, saya pikir maksud Anda beberapa program lain menggunakan shell untuk menjalankan perintah ini. Jadi var
, kutip saja , tapi pastikan itu tidak termasuk karakter kutipan sendiri ...
s='"'; echo "$s"
cetak "
.
var=untrusted string
di program induk, demikian var
juga variabel lingkungan yang sudah ditetapkan saat memohon sh
. Maka Anda hanya perlu mengutipnya setiap kali Anda mengembangkannya, yang mungkin dilakukan dengan andal. Ah, saya melihat bahwa ide itu sudah menjadi bagian dari jawaban Stéphane>. <
var
argumen. Misalnya memanggilsh
dengan argumen-c
,'cd "$1"; echo > create_a_file_here'
,'sh'
,var
karya dan tidak perlu perubahan apapunvar
. The'sh'
argumen dilewatkan sebagai$0
.