В рамках мови програмування я виконую просту команду оболонки
cd var; echo > create_a_file_here
при цьому Var є змінною, яка містить рядок (сподіваюсь) каталогу до місця, де я хочу створити файл "create_a_file_here". Тепер, якщо хтось бачить цей рядок коду, його можна використовувати, призначивши, наприклад:
var = "; rm -rf /"
Речі можуть стати досить потворними. Одним із способів уникнути вищезазначеного випадку може бути пошук рядка в var для деяких спеціальних символів, таких як ';' перед виконанням команди оболонки, але я сумніваюся, це охоплює всі можливі подвиги.
Хтось знає хороший спосіб переконатися, що "cd var" змінює лише каталог і більше нічого?
shчи створюєте власну мову програмування з подібним синтаксисом, але яка розширюється, varа не вимагає від вас запису cd "$var"? Або це bashз shopt -s cdable_vars? О, я думаю, ви маєте на увазі, що якась інша програма висуває оболонку для виконання цих команд. Тож просто цитуйте var, але переконайтеся, що він не містить самого цитата…
s='"'; echo "$s"відбитки ".
var=untrusted stringв батьківській програмі, так varце змінна середовище, яка вже встановлена при виклику sh. Тоді вам потрібно просто цитувати це кожного разу, коли ви розширюєте це, що можна зробити надійно. Ах, я бачу, що ця ідея вже є частиною відповіді Стефана>. <
varяк аргумент. Наприклад викликshз аргументами-c,'cd "$1"; echo > create_a_file_here','sh',varробіт і не вимагає яких - небудь змінvar.'sh'Аргумент передається як$0.