Описание тега combinatorial-game-theory
Используя функцию eval
здесь нет смысла вообще. Прежде чем вы решите, как исправить ваш скрипт, тщательно обдумайте свои требования и запишите их. Читая ваш вопрос, понятно, что вы не имеете четкого понимания того, что вы хотите сделать, и вы не собираются решать эту проблему, пока вы выяснить, что вы ожидаете от решения.
предполагается, что каждый небезопасных строка имеет по крайней мере места в нем
Нет, даже не близко. Скрипт позволяет пользователю выполнить произвольный код, так как это позволяет пользователю ввести любую строку, не содержащую пробелов и переводов строк. Пользователь может использовать вместо вкладки и точки с запятой. Даже без каких-либо пробелов, пользователь мог ввести команду замены:
ощупь в /tmp/this_is_executed'somefile
$(сенсорный /tmp/и this_is_executed)некий-файл
Является ли это проблемой? Это зависит от того, что ты пытаешься сделать. Являются входные данные, поступающие от пользователя, который запускает скрипт с обычного счета? Если это так, нет никакой проблемы безопасности, но это не имеет смысла для скрипта считывать входные данные из стандартного входного потока: оно должно взять вместо аргумента командной строки, а затем командная строка, оболочка переменной котоые хочешь. Если ваш скрипт выполняется с повышенными привилегиями или принимает данные по сети, затем функция eval
является наиболее определенно зло, и вы не должны использовать его, пока вы не понимаете последствий. функция eval
принимает строку в качестве аргумента (если он имеет несколько аргументов, они вместе с пробелами) и выполняет его как шелл-кода. Если вы не хотите, чтобы выполнить шелл-код, эвал
- это неправильный инструмент.
Если скрипт принимает непривилегированный вход, то это неправильное место, чтобы выполнить вычисления переменной. Сделать это в интерфейсе, что для входа в ваш скрипт, работает с правами пользователя (например, использование JavaScript, если вход идет через веб-браузер). В вашем скрипте, вы должны проверить, что указанные имена файлов в каталоге, пользователь должен иметь доступ. Будьте осторожны ..
и символических ссылок, которые могли бы позволить избежать дерево каталогов, и о ведущих -
что может быть проанализировано в качестве опции вместо имен файлов.