Удалить папку подкаталога при сохранении содержимого

Использование eval здесь не имеет никакого смысла. Прежде чем решать, как исправить ваш скрипт, тщательно обдумайте ваши требования и запишите их. Читая ваш вопрос, ясно, что у вас нет четкого понимания того, что вы хотите сделать, и вы не решите эту проблему, пока не выясните, чего вы ждете от решения.

Предполагается, что в каждой небезопасной строке есть хотя бы пробел

Нет, даже близко нет. Ваш скрипт позволяет пользователю выполнить произвольный код, поскольку он позволяет пользователю набирать любую строку, не содержащую пробелов и новой строки. Вместо них пользователь может использовать табуляцию и точку с запятой. Даже без пробелов пользователь может набрать подстановки команд:

`touch /tmp/this_is_executed`somefile
$(touch /tmp/this_is_executed)somefile

Является ли это проблемой? Это зависит от того, что вы пытаетесь сделать. Ввод идет от пользователя, который запускает ваш сценарий из обычной учетной записи? Если да, то проблем с безопасностью нет, но сценарию нет смысла читать ввод из стандартного ввода: вместо этого он должен принимать аргумент командной строки, и тогда оболочка командной строки будет выполнять расширение переменных, которое вы хотите. Если ваш скрипт выполняется с повышенными привилегиями или получает ввод по сети, то eval определенно является злом, и вы не должны использовать его, пока не поймете последствия. eval принимает в качестве аргумента строку (если аргументов несколько, они соединяются пробелами) и выполняет ее как shell-код. Если вы не хотите выполнять shell-код, eval - не тот инструмент.

Если сценарий принимает непривилегированный ввод, то это не то место, где следует выполнять расширение переменных. Сделайте это в интерфейсе, который подает входные данные в ваш сценарий, работающий с привилегиями пользователя (например, используйте Javascript, если входные данные поступают из веб-браузера). В своем скрипте вам нужно будет проверить, что указанные имена файлов находятся в каталоге, к которому пользователь должен иметь доступ. Будьте осторожны с и символических ссылок, которые могут позволить экранировать дерево каталогов, и ведущих -, которые могут быть разобраны как опции вместо имен файлов.

-2
18.08.2015, 22:46
0 ответов

Теги

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