Size: a a a

2020 May 31

AB

Alexander Berezin in pro.lua
Arslan Yulbirdin
Можешь из пыхи вызвать что-то типа:
Lua->call("loadstring",$usercode);
Да, щас пытаюсь.
Проблема пока в том, что в loadstring не получается передать кастомный _ENV
источник

AB

Alexander Berezin in pro.lua
Вот, разобрался, всем спасибо 😌 Никаких инжектов вроде

$lua = new Lua();

$lua->eval(/** @lang Lua */ <<<LUA
   function sandbox(code)
       local scope = loadstring(code)
   
       local userEnv = {
           loadstring = loadstring,
           print = print,
           pairs = pairs,
       }
       userEnv._G = userEnv
   
       setfenv(scope, userEnv) -- для >= 5.2 нужен полифилл
       return scope()
   end
LUA);

$userCode = /** @lang Lua */ <<<LUA
   for k in pairs(_ENV) do
       print(k, "\\n")
   end
LUA;

echo $lua->call('sandbox', [$userCode]);
источник

S

Snusmumriken in pro.lua
Александр Караев
это неудачная попытка защититься от инжектов =)
Не от инжектов, а от многострочных строк. Редко когда люди используют вложенность этой фигни 4 и выше.

И вот тут инжектнуть можно только если ты знаешь как оно устроено.
источник

AB

Alexander Berezin in pro.lua
Snusmumriken
Не от инжектов, а от многострочных строк. Редко когда люди используют вложенность этой фигни 4 и выше.

И вот тут инжектнуть можно только если ты знаешь как оно устроено.
Так а что этот оператор делает в итоге?
[==== ====]
источник

S

Snusmumriken in pro.lua
local str = [[
многострочная
строка
]]

local str = [=[
многострочная строка
с [[двойными скобками]] внутри
]=]
источник

АК

Александр Караев... in pro.lua
Snusmumriken
Не от инжектов, а от многострочных строк. Редко когда люди используют вложенность этой фигни 4 и выше.

И вот тут инжектнуть можно только если ты знаешь как оно устроено.
обычно пентестеры автоматизируют брут подобных вариантов, поэтому система уже потенциально уязвима, вопрос времени и интереса
источник

AB

Alexander Berezin in pro.lua
Snusmumriken
local str = [[
многострочная
строка
]]

local str = [=[
многострочная строка
с [[двойными скобками]] внутри
]=]
А, спасиб, тогда мне это не грозит
источник

AB

Alexander Berezin in pro.lua
Snusmumriken
&sandboxcode = <<<EOD
...
do
 local _ENV = userenv
 loadstring[====[$usercode]====]()
end
EOD;

Потом эвалишь это дело.
Кстати тут код внутри loadstring не реагирует на _ENV, поэтому тут нужен setfenv
источник

S

Snusmumriken in pro.lua
А, возможно. Ну тут указание энвайрнмента для отдельной функции.
источник

AB

Alexander Berezin in pro.lua
Snusmumriken
А, возможно. Ну тут указание энвайрнмента для отдельной функции.
Функция/скоп, как раз и есть пользовательский код. Ему без разницы, что выше другой _ENV прописан, он берёт глобальный
источник

S

Snusmumriken in pro.lua
Я вот понял.
Но вообще странно.
источник

а

аннлн in pro.lua
11.0000000003
источник

а

аннлн in pro.lua
пшш
источник

а

аннлн in pro.lua
тут есть кто-то:
а) живой
б) кто сталкивался с многопоточностью в Lua (и многопоточностью как таковой)
?
источник

AY

Arslan Yulbirdin in pro.lua
Оригинально
источник

а

аннлн in pro.lua
источник

а

аннлн in pro.lua
ещё можно живых людей с опытом разработки C extensions для луи.
источник

CP

Companion Philipp in pro.lua
аннлн
тут есть кто-то:
а) живой
б) кто сталкивался с многопоточностью в Lua (и многопоточностью как таковой)
?
б) ну есть
источник

а

аннлн in pro.lua
Companion Philipp
б) ну есть
какое решение используешь?
источник

CP

Companion Philipp in pro.lua
Ну, хочешь многопоточку в Луа – запускай несколько луастейтов :)
источник