The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Bash экранированние"
Отправлено LINUXORGRU, 15-Мрт-24 10:08 
Всем здравствуйте. Хочется критики, суть такая, есть lua (не хихикать) скрипт например который через io.popen() выполняет одни команды читая вывод и опять через io.popen() передаёт этот вывод как ввод другой команде, вроде всё просто.  Но хочется чтобы даже в теории не было так (из за бага/просто кривых рук/положения Венеры в созвездии стрельца) что ввод одной команды попав в popen() как есть не исполнился, чтобы данные были только данными и никак не обрабатывались оболочкой (не исполнялись команды, не обрабатывались спецсимволы оболочки).

Хорошо, тут вот  https://www.opennet.ru/docs/RUS/bash_scripting_guide/c1833.h...указано про экранирование в одинарные кавычки с учётом вложенных ежели таковые имеются. Теперь данные это просто данные и не происходит никакой магии, единственное что если эти данные например 'pwd' будут исполнены попав в оболочку, но подумалось что если добавить тупо пробел то что угодно типа 'rm ' уже ну никак не сможет быть исполнено так как оболочка будет искать в PATH как есть вместе с пробелом, но просто с ним ничего там не найдёт, это в теоооории, гарантирует что любая дрянь попавшая в шелл ничего не сделает.

Типа такого


function escape(text)
    return "'" .. text:gsub("'", "'\\''") .. " '" -- пробел в конце дабы сломать поиск в PATH
end

os.execute(escape("тут любая лютая дичь"))


Вопрос, бабабадумс, я дурак и что-то упускаю или всё хорошо?


Размашисто описал, но к примеру я беру через xclip случайные данные которые скопипастил из браузера и передаю их как параметр командной строки другой программе в оболочку предварительно пропустив через escape() что выше описан. И в теории вывод xclip может попасть в оболочку (sh/bash/dash/etc) как есть, но это нужно не допускать даже в теории.


Есть ли подвох?

P.S Да я знаю про пайпы просто шела


app1 | app2

Но, не все программы умеют читать из стандартного ввода, промежуточные данные могут быть как-то в середине модифицированы (для этого lua мне и нужна) вызовы через popen это просто взять данные в одном месте, обработать на lua, передать дальше. И вот про это "передать" я вот балакаю :)

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру