Zum Hauptinhalt springen

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, file und table.
  • 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_require bedingungslos auf true gesetzt. 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