На языке программирования я выполняю простую команду оболочки
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.