Безопасная передача аргументов команде

Открытый ключ предназначен для копирования в ~/.ssh/authorized_keys(, который является файлом, а не каталогом )на удаленных хостах, к которым вы будете подключаться.

Закрытый ключ предназначен для подключения из вашей локальной системы.

Похожие:

1
18.04.2021, 19:47
1 ответ

Прежде всего, всегда заключайте свою переменную в двойные кавычки (есть исключения из этого правила, но вы легко узнаете их, когда придет время ). Риск того, что ваше имя файла содержит символы пробела, одинаково высок (и, вероятно, выше ), чем имя файла, начинающееся со знака минус.

Таким образом, ваша первая команда должна быть:

<command> "$FILENAME"

Далее, случай -<option>. Вы довольно хорошо резюмируете проблему :, используя --, это нормально, но вы не можете вслепую добавить --к своей команде, поскольку все команды не поддерживают этот синтаксис.

Совершенно безопасный способ защиты от переменных, содержащих имя файла, начинающееся со знака минус (или любого другого конфиденциального символа ), состоит в том, чтобы изменить имя файла, чтобы добавить путь к нему, либо относительный путь(./file)или абсолютный путь(/foo/bar/file). Таким образом, первый символ безвреден, так как это либо ., либо /.

Этот код добавит относительный путь к $filename, если это уже не абсолютный путь:

[[ "$filename" != /* ]] && filename="./$filename"

Лично я в своих сценариях оболочки предпочитаю изменять аргументы файла на их каноническое представление (полный путь):

filename="$(readlink -f -- "$filename")"

или:

filename="$(realpath -m -- "$filename")"

(если вам интересно, что из realpathи readlinkвы должны использовать, см. этот отличный ответ)

3
28.04.2021, 22:53

Теги

Похожие вопросы