Es besteht die Gefahr, dass Benutzer HTML / JS-Dateien hochladen können

9

Wir gestalten eine Online-Arcade für HTML5-Spiele. Die Benutzer können eine Zip-Datei hochladen, die ihr Spiel enthält.

Beim Hochladen wird der Zip vom Server entpackt und jede Datei wird geloopt. Dabei wird die Erweiterung auf eine Whitelist überprüft, die folgendes erlaubt:

  • .html
  • .js
  • .png
  • .jpg
  • .appcache
  • .m4a
  • .ogg

(Spiele müssen in unserem Spieleeditor gemacht werden, der diese Dateien exportiert). Dies sollte verhindern, dass Benutzer ZIPs, serverseitige Skriptdateien usw. hochladen.

Die Spiele werden dann auf unsere statische cookielose Domain (scirra.net) verschoben. Wenn das Spiel auf unserer scirra.com-Seite gespielt wird, wird das Spiel in einem iframe angezeigt, der auf die scirra.net-Domain zeigt. Dies sollte verhindern, dass böswillige JS auf die Cookies von scirra.com zugreifen.

Ist diese Iframe-Technik und Whitelist umfassend genug, um zu verhindern, dass etwas Böswilliges passiert? Beachten Sie, dass wir jede JS-Datei nicht wirklich screenen können. Daher sollten wir davon ausgehen, dass die Leute versuchen werden, schädliche JS-Dateien hochzuladen.

    
Tom Gullen 22.11.2011, 14:26
quelle

3 Antworten

4

Die Regeln für die Ursprungsvererbung für iFrames verhindern, dass scirra.net iframe in scirra eingreift .com.

Dies verhindert jedoch nicht alle Angriffe. In der Tat führen Sie eine gespeicherte XSS-Schwachstelle ein. XSS kann verwendet werden, um browserbasierte Angriffe einzuführen, wie zum Beispiel das Ausnutzen von Pufferüberläufen in ActiveX-Komponenten. Ausnutzung von Falken in Flash, Adobe Reader oder Microsoft Office.

Sie sollten erwägen, einen Antivirus auf dem scirra.net-Inhalt auszuführen. Dies verhindert zwar nicht alle Angriffe. Die ifram-Seite könnte einen anderen iframe umleiten oder einführen, der schädlichen Inhalt enthält.

Wie Cheeksoft darauf hinwies. Apps können sich gegenseitig mit XSS beeinflussen. Eine bösartige App könnte Zugang zu einer anderen Anwendung bekommen Offline-Speicher oder andere eingebettete Daten erhalten in einer anderen App. Durch das Erzwingen, dass jede App in Subdomänen geschaltet wird, wird dieses Problem gemildert. Sie könnten einen DNS-Eintrag einrichten, um * .scirra.net auf Ihren Server zu verweisen und sich um den Domainnamen in Ihrer Web-App kümmern.

    
rook 22.11.2011 15:30
quelle
1

Wie wäre es, wenn Sie einige Screen-Funktionen in den von Ihnen bereitgestellten Spiele-Editor einbauen? Verweisen Sie Referenzen auf externe URLs, führen Sie eine Codeüberprüfung durch, überprüfen Sie die Codierung usw.

Sie müssten die Zip-Datei sperren, um Manipulationen zu verhindern, aber das könnte trotzdem eine gute Idee sein.

    
schroeder 22.11.2011 18:20
quelle
0

Für jeden, der dies liest, gibt es ein experimental / beta iFrame-Sandbox-Attribut:

Ссылка

Beachten Sie, dass dies momentan nur für Chrome und Opera funktioniert. Dadurch können Sie einige einschränkende Funktionen angeben.

Im Falle unserer Frage haben wir jedoch die Idee verschrottet und entschieden, dass wir, weil wir in der vorteilhaften Position sind, ein Spielentwickler-Programm zu haben, den Benutzer einfach dazu bringen können, die JSON-Daten hochzuladen, die garantiert sicher sind mit den Kernfunktionen, die von uns gehostet werden.

Jedes Plug-in, das wir manuell überprüfen und genehmigen können, ist ein viel kleinerer Job als jedes Spiel manuell zu genehmigen.

    
Tom Gullen 22.11.2011 18:46
quelle