Я пишу сценарий bash, который требует нескольких частей ввода пользователя, прежде всего путей к каталогам и имен файлов. Программа создаст указанные каталоги и файлы.Безопасная проверка ввода в скрипте Bash/Shell
При написании пути к каталогу, я прошу абсолютный путь - ~/DIR/... или $ PATH/DIR/... или ./DIR/... не разрешен , пути каталогов должны предоставляться только в виде /DIR/DIR/..., пути к файлам в виде /DIR/DIR/.../filename и имена файлов в виде файла . Я также хочу заверить, что пользователь не добавил никаких параметров в командной строке (например, если я запустил sudo, я хочу заверить, что пользователь не добавил -u в любом месте своего заявления) на их вклад.
Однако я не совсем уверен в наилучшем способе дезинфекции их ввода, поскольку пути к каталогам и имена файлов могут содержать тире, символы подчеркивания, пробелы, периоды и буквенно-цифровые символы. Любой другой символ должен быть обнаружен.
Пользовательский ввод собран через . Я использую систему Ubuntu, поэтому, если она соответствует оболочке Ubuntu, она будет работать. Предположим, что установлены только системные пакеты по умолчанию.
Возможны несколько вариантов обработки отдельных разделов проверки (например, с использованием --
для обработки следующих данных как параметра, а не команды [предложенной Siguza], а затем еще одной опции для обработки путей к каталогам).
Для правильного отображения структуры каталогов требуются абсолютные пути. Любой другой формат пути заставит программу некорректно интерпретировать структуру при сопоставлении или добавлении к другим путям из-за функций, которые я выполняю на строках путей.
спасибо.
Что сработало: я использовал принятый ответ, используя Realpath в некоторых ситуациях и readlink, и с помощью - интерпретировать следующий текст в качестве параметров. Если вы хотите разрешить относительные пути, используйте результат readlink или realpath как ваш путь. Если вы хотите запретить относительные пути, сравните исходную строку с результатом readlink или realpath.
Большинство команд поддерживают опцию '-', которая позволяет им обрабатывать все следующие параметры в качестве аргументов, а не опции/флаги. Кроме того, приложите все переменные в двойные кавычки, чтобы избежать расширения. – Siguza
Хотя это касается первых двух проблем, все равно остается, что пользователь может целые пути каталога в формате, который моя программа не может принять. Мне нужно либо отклонить недействительный ввод, либо привести его к допустимому вводу. –
Re: «пользователь может целые пути каталога в формате, который моя программа не может принять. Мне нужно либо отклонить недопустимый ввод, либо привести его к допустимому вводу»: * Или * вы можете изменить свою программу, чтобы принимать такие форматы. , , – ruakh