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