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 varbukannya mengharuskan Anda untuk menulis cd "$var"? Atau bashdengan 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 stringdi program induk, demikian varjuga 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>. <
varargumen. Misalnya memanggilshdengan argumen-c,'cd "$1"; echo > create_a_file_here','sh',varkarya dan tidak perlu perubahan apapunvar. The'sh'argumen dilewatkan sebagai$0.