Ich bin neu zu Lua und möchte fragen, ob es möglich ist, Lua-Syntax in der Konfigurationsdatei zu beschränken? Ich weiß, dass das Laden von Konfig im Gefängnis ausgeführt werden muss, aber wie wir mit in der Konfigurationsdatei umgehen können, die wir laden wollen? Gibt es eine Möglichkeit, nur Zeichenfolgen, Zuweisungen und Tabellen in der Konfiguration zuzulassen, und wenn nicht, was ist dann der beste Weg, um zu überprüfen, dass die Lua-Datei keine unerwünschten Konstrukte enthält? Ist manuelle Voranalyse die einzige Lösung?wie lua config-Datei zu machen, um sicher zu sein
Antwort
Sie scheinen bereits über "Sandboxing" in Lua zu wissen. Was also übrig bleibt, ist, wie Sie bösartige Konstrukte wie Endlosschleifen sagen. Und um das zu lösen, müssen Sie das Halteproblem lösen. Was nicht praktisch ist.
Anstatt "manuell" zu parsen und zu hoffen, dass Sie alle schädlichen Inhalte finden (werden Sie nicht), wie wäre es mit Ihrem Lua-Interpreter mit einem Timer-Set, so dass das Skript unterbrochen wird, wenn es länger als N Sekunden dauert ?
Wenn Sie bestimmte Konstrukte in Lua explizit verbieten wollen, müssen Sie die Datei tatsächlich selbst scannen. Beachten Sie, dass diese Konstrukte auch in Konfigurationsdateien gültige Verwendungen aufweisen, sodass Sie einschränken, was der Benutzer tun kann.
Es wäre nicht zu schwer, einen einfachen Lua-Lexer zu schreiben, der den Inhalt von Strings und Kommentaren ignoriert, aber Fehler bei allen anderen Lua-Schlüsselwörtern außer return
. Bei richtigem Sandboxing (dh es sind keine Funktionen verfügbar, um angerufen zu werden), sollte das ausreichen, um irgendwas Böswilliges auszusondern.
Beachten Sie auch, dass Lua 5.1 es nicht leicht macht, den Parser davon abzuhalten, Nichttextdaten zu analysieren (zB: kompilierter Lua Bytecode). 5.2 bietet spezielle API-Unterstützung, um den Loader dazu zu zwingen, nur Text zu erkennen und daher Bytecode abzulehnen.
- 1. Form Eingabe Validierung mit HTML genug, um sicher zu sein?
- 2. Gibt es eine Möglichkeit, um sicher zu sein, Tests in einem bestimmten Paket zu überspringen?
- 3. XML in Lua sicher generieren
- 4. Java-Code, sicher sein
- 5. Kompiliere lua zu Bytecode, um auf embedded Linux zu laufen
- 6. Wie Lua Skript zu beenden?
- 7. Wie lua nacheinander zu laufen
- 8. Wickeln Sie ein Enum in Selene, um in Lua zugänglich zu sein
- 9. Verschachtelung wählt, um Popularitätsalgorithmus zu machen
- 10. Windows Lua zu ausführbaren
- 11. Get Lua zu drucken (functionname.variable)
- 12. Trim Dateiname, um kurz genug zu sein
- 13. Lua Fehler Gitter 16x16 machen
- 14. Lua zu JVM Compiler?
- 15. Forcieren einer Colormap, um quadratisch zu sein
- 16. jquery schieben, um multidimensionales Array zu machen
- 17. jqGrid: Suchformular geändert, um flach zu sein?
- 18. Java Mail-API, jede Möglichkeit, um sicher zu sein, ob Mail geliefert wird oder nicht?
- 19. ColdFusion zu groß, um eine ganze Zahl zu sein
- 20. Lua Hierarchie String zu Tabelle
- 21. Wie Benutzerdaten in Lua zu überprüfen
- 22. JCIFS: Dateiabruf ist zu langsam, um verwendbar zu sein
- 23. Wie man Web-Service Thread sicher machen?
- 24. Datensätze in C# sicher machen #
- 25. Lua - Anzahl zu String-Verhalten
- 26. Sollte ich Arrays immer dynamisch zuweisen, nur um sicher zu sein?
- 27. Sicher, dieses Skript öffentlich zu machen? Newbie Frage
- 28. Ist es sicher, Ihren Fabric-API-Schlüssel verfügbar zu machen?
- 29. Wörterbuchzugriff thread-sicher machen?
- 30. Java-Anwendung, um Datenbank-Dump zu machen
+1 für praktische Lösung, anstatt es auf die andere harte Weise zu lösen – cctan