Skripte schützen und require korrekt akzeptieren
Warum kann require ein Sicherheitsrisiko darstellen?
- Verschlüsselte Skriptmodule von XXTouch können von anderen Skripten oder Modulen mit require eingebunden werden.
- Wenn ein verschlüsseltes Skript mit require eingebunden wird, ist die globale Umgebung nicht vertrauenswürdig; vom Skript aufgerufene Funktionen wurden möglicherweise ersetzt.
Wie wird require korrekt verwendet?
- XXTouch stellt sicher, dass die Funktionen bestimmter Module vor dem Aufruf durch require in ihren Ausgangszustand zurückversetzt werden, einschließlich aller Funktionen der Module
os,io,string,device,http,fileundtable. - Die sichere Verwendung der Funktionen in den oben genannten Modulen lässt sich sicherstellen, indem die globale Umgebung tief in eine lokale Umgebung innerhalb des Moduls kopiert wird, zum Beispiel:
-- Diesen Code am Anfang des Skripts einfügen
local _ENV = table.deep_copy(_ENV)
-- Hier folgt der Hauptteil des Skripts
--
-- Am Ende müssen möglicherweise exportierte Funktionen oder Konstanten zurückgegeben werden - Wenn ein Modul mit require eingebunden wird, wird die globale Variable
been_requirebedingungslos auftruegesetzt. Anhand dieser Variable lässt sich feststellen, ob das aktuelle Skript gerade per require eingebunden wird, zum Beispiel:-- Diesen Code am Anfang des Skripts einfügen
if been_require then
return -- Bei Einbindung durch require sofort beenden
end
-- Hier folgt der Hauptteil des Skripts