История изменений
Исправление shdown, (текущая версия) :
Экранирование от языка не зависит.
Конечно зависит. Для Си и для шелла экранировать нужно по-разному.
И у меня всё экранировано
Ничего у тебя не экранируется. Во-первых, ты не экранируешь знак доллара, backtick, backslash, переводы строки, которые интерпретируются в двойных кавычках. Во-вторых, ты явно не понимаешь, как работают одинарные кавычки в shell.
function change(str)
str = str:gsub('%"','\\"');
str = str:gsub("%'","\\'");
return str;
end
title = '$(touch /tmp/pwned)'
arg = {'arg1', 'arg2'}
title = change(title)
os.execute('notify-send -u normal Воспроизводится "'..title..'\n'..arg[2]..' "');
Этот код исполнит код из title и создаст файл /tmp/pwned
.
Не говоря уже о том, что код абсолютно угрёбищен во всех остальных отношениях. Вот ты можешь объяснить, зачем ты используешь ;
в Lua? Это даже не JavaScript, где есть automatic semicolon insertion и без них в некоторых случаях может что-то не то выйти. Почему if (something) then
(зачем скобки)?
Исправление shdown, :
Экранирование от языка не зависит.
Конечно зависит. Для Си и для шелла экранировать нужно по-разному.
И у меня всё экранировано
Ничего у тебя не экранируется. Во-первых, ты не экранируешь знак доллара, backtick, backslash, переводы строки, которые интерпретируются в двойных кавычках. Во-вторых, ты явно не понимаешь, как работают одинарные кавычки в shell.
function change(str)
str = str:gsub('%"','\\"');
str = str:gsub("%'","\\'");
return str;
end
title = '$(touch /tmp/pwned)'
arg = {'arg1', 'arg2'}
title = change(title)
os.execute('notify-send -u normal Воспроизводится "'..title..'\n'..arg[2]..' "');
Этот код исполнит код из title и создаст файл /tmp/pwned
.
Не говоря уже о том, что код абсолютно угрёбищен во всех остальных отношениях. Вот ты можешь объяснить, зачем ты используешь ;
в Lua? Это даже не JavaScript, где есть automatic semicolon insertion и без них в некоторых случаях может что-то не то выйти.
Исходная версия shdown, :
Экранирование от языка не зависит.
Конечно зависит. Для Си и для шелла экранировать нужно по-разному.
И у меня всё экранировано
Ничего у тебя не экранируется. Во-первых, ты не экранируешь знак доллара, backtick, backslash, переводы строки, которые интерпретируются в двойных кавычках. Во-вторых, ты явно не понимаешь, как работают одинарные кавычки в shell.
function change(str)
str = str:gsub('%"','\\"');
str = str:gsub("%'","\\'");
return str;
end
title = '$(touch /tmp/pwned)'
arg = {'arg1', 'arg2'}
title = change(title)
os.execute('notify-send -u normal Воспроизводится "'..title..'\n'..arg[2]..' "');
Этот код исполнит код из title и создаст файл /tmp/pwned
.