Ich habe Lua (5.1) in eine C / C ++ - Anwendung eingebettet.
Ich verwende die Funktion LuaL_openlibs()
, um die Basisbibliotheken zu laden. Diese Funktion lädt jedoch einige andere Bibliotheken, die ich deaktivieren möchte, damit sie für meine Lua-Skripte nicht verfügbar sind.
Insbesondere möchte ich die IO- und OS-Module deaktivieren. Gibt es eine Funktion, die ich aufrufen kann, um diese Module programmatisch zu deaktivieren (oder zu entladen), damit ich eine sichere Sandbox-Umgebung für die Ausführung von Lua-Skripten erstellen kann?
Ich weiß nicht, wie man Module deaktiviert, aber Sie können immer noch auswählen, welche geladen werden sollen, anstatt sie alle mit luaL_openlibs
zu laden. Abschnitt 7.3 des Lua 5.1-Handbuchs lautet:
Die Funktionen
luaopen_*
(zum Öffnen von Bibliotheken) können nicht direkt aufgerufen werden, wie eine reguläre C-Funktion. Sie müssen durch Lua aufgerufen werden, wie eine Lua-Funktion.
Das heißt, anstatt die Funktion wie in Lua 5.0 direkt aufzurufen:
%Vor% ... Sie drücken es als C-Funktion mit seinem Namen und verwenden lua_call
oder ähnliches in Lua 5.1:
Die Funktionen, mit denen Sie dies tun können, sind in lualib.h
:
luaL_openlibs
durchsucht nur eine Liste von Bibliotheksladern, die in derselben Datei deklariert sind. Löschen / kommentieren Sie einfach die Zeilen luaopen_io
und luaopen_os
. Fertig.
Wenn Sie die Lua-Quelle nicht bearbeiten möchten, können Sie eine eigene Funktion definieren, die diese beiden Bibliotheken auslässt:
%Vor%In älteren Versionen von Lua war es möglich, die Bibliotheken anzugeben, die Sie laden wollten. Insbesondere in meiner Kopie von lualib.h sehe ich die folgenden erklärten Funktionen:
%Vor%Ich konnte Ihnen nicht die Konsequenzen sagen, wenn ich nicht alle Bibliotheken lade, da ich luaL_openlibs () in meinem Code anrufe. Die erste Edition der Programmierung in Lua ist online verfügbar und erwähnt, dass luaL_openlibs () die luaopen _ * () Funktionsaufrufe ersetzen sollte. Die älteren Funktionen können jedoch aus Gründen der Abwärtskompatibilität weiterhin enthalten sein. Ссылка
HTH