2011-11-22 16 views
9

Stiamo progettando un aracade online per i giochi HTML5. Gli utenti possono caricare un file zip che contiene il loro gioco.Rischi nel consentire agli utenti di caricare file HTML/JS

Sul caricati, la cerniera viene estratto dal server e ogni file è in loop controllando è un'estensione contro una lista bianca che consente:

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

(I giochi devono essere creati nel nostro editor di giochi che esporta quei file). Ciò dovrebbe impedire alle persone di caricare zip, file di script sul lato server ecc.

I giochi vengono quindi spostati nel nostro dominio statico senza cookie (scirra.net). Quando il gioco viene giocato sulla nostra pagina scirra.com, il gioco viene visualizzato in un iframe che punta al dominio scirra.net. Questo dovrebbe impedire a JS malintenzionato di accedere ai cookie di scirra.com.

Questa tecnica e whitelist iframe è sufficientemente completa da impedire che venga fatto qualcosa di malevolo? Nota che non è possibile eseguire lo screening di ogni file JS, quindi dovremmo pensare che le persone provino a caricare JS dannoso.

+5

so che questo potrebbe causare un po 'di flack, ma è necessario un processo di approvazione simile alla mela. –

+0

Penso che dipenda anche dal tipo di sicurezza che ti interessa. Sei interessato unicamente a proteggere i tuoi server o sei anche interessato ad essere sicuro di non ospitare codice dannoso per i tuoi giocatori. Se si stanno prendendo in considerazione entrambi i casi, potrebbe essere necessario fare un po 'più di lavoro per verificare che l'utente non stia realizzando (anche all'interno del proprio editor) qualche JavaScript furbo che potrebbe sfruttare il giocatore. – RLH

+0

@Daniel, non è proprio realistico per noi. Abbiamo un vasto pubblico di persone che vorrebbero usarlo e vorrebbe un modo per sandbox ogni gioco in modo che sia sicuro. Mi sto davvero chiedendo se un JS eseguito in un frame su un dominio diverso possa fare danni. –

risposta

4

Il origin inheritance rules for iframes impedirà che l'iframe di scirra.net interferisca con scirra.com.

Ciò tuttavia non impedisce gli attacchi all. In effetti si sta introducendo una vulnerabilità XSS memorizzata. XSS può essere utilizzato per introdurre attacchi basati su browser, come lo sfruttamento dei buffer overflow nei componenti ActiveX. Sfruttare falso in Flash, Adobe Reader o Microsoft Office.

È consigliabile prendere in considerazione la possibilità di eseguire un anti-virus sul contenuto di scirra.net. Anche se questo non impedirà tutti gli attacchi. La pagina ifram potrebbe reindirizzare o introdurre un iframe contenente contenuti dannosi.

Come ha sottolineato Cheeksoft. Le app saranno in grado di influenzarsi a vicenda con XSS. Un'applicazione malcious potrebbe accedere ad un'altra applicazione offline storage o ottenere altri dati incorporati in un'altra app. Costringere ogni app ad avere il suo sottodominio attenuerà questo problema. È possibile impostare un record DNS in modo che punti * .scirra.net sul server e si occupi del nome di dominio all'interno della propria app Web.

+1

E se si ospitano tutte le app inoltrate sullo stesso dominio, è possibile che sia stato arrestato (e riflesso) xss memorizzato sul proprio dominio, ma un'app dannosa può eseguire attacchi xss contro tutte le altre app. Servi ognuno dal proprio nome di dominio generato dinamicamente e cerca di persuadere gli sviluppatori a impostare sempre i loro cookie su myapp.scirra.net e non impostare mai solo scirra.net. – Cheekysoft

+0

@Cheekysoft sì questo è un buon punto. Non stavo pensando a quel vettore, potrebbero esserci informazioni preziose archiviate nelle altre app o nei sistemi di storage js offline. – rook

1

Che ne dici di incorporare alcune funzionalità di screening nell'editor di giochi che fornisci? Eliminare i riferimenti agli URL esterni, eseguire la convalida del codice, verificare la codifica, ecc.

Si dovrebbe bloccare il file zip per evitare manomissioni, ma potrebbe comunque essere una buona idea.

0

Per chiunque altro leggendo questo, c'è un sperimentale/beta iFrame attributo sandbox:

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox

Nota solo attualmente funziona su Chrome e Opera. Questo ti permette di specificare alcune funzionalità limitanti.

Tuttavia, nel caso della nostra domanda abbiamo scartato l'idea e abbiamo deciso che, poiché siamo nella posizione vantaggiosa di avere un programma di creazione di giochi, possiamo semplicemente far caricare l'utente sui dati Json che è garantito essere sicuro con le caratteristiche principali del motore che sono ospitate da noi.

Qualsiasi plug-in è possibile esaminare e approvare manualmente per l'uso, che è un compito molto più piccolo rispetto all'approvazione manuale di ogni gioco.

Problemi correlati