Applicazione web estensibile in cui gli utenti possono caricare il codice lato client

0

Ho una semplice applicazione web creata con Angular che recupera alcuni stati da un server web e li mostra all'utente. Inoltre, voglio implementare una funzionalità in cui gli utenti sono in grado di personalizzare la visualizzazione di questa applicazione aggiungendo dinamicamente il nuovo codice sulla pagina sottoposta a rendering in modo che le modifiche si riflettano sugli altri client. In linea di principio questo potrebbe essere implementato con un motore di template sul lato server, ma ovviamente questo apre un enorme problema di sicurezza in cui ogni utente è in grado di aggiungere funzionalità arbitrarie all'app. Quale potrebbe essere la soluzione appropriata per questo problema? Il mio primo pensiero sarebbe quello di implementare un server in cui l'angolare invia i modelli e lascia che quelle parti della vista siano rese in remoto, ma ovviamente questo sconfigge lo scopo di usare Angular in primo luogo.

    
posta Eduardo Gonçalves 09.06.2016 - 15:39
fonte

1 risposta

2

dynamically appending new code on the rendered page in a way that the changes would reflect on the other clients

E questo rende possibile fare XSS, indurre gli utenti a fornire dati riservati come password e fare molte altre cose interessanti.

Non puoi semplicemente permettere agli utenti di modificare il codice sorgente ed eseguirlo, non verificato, nei browser di altre persone. Non è sicuro se è sul lato server. Non è sicuro se è anche sul lato client.

Puoi fornire un modo per cambiare contenuto e forse un po 'di presentazione. Ad esempio, StackExchange consente agli utenti di modificare il contenuto e la presentazione di parti specifiche delle pagine: ciò consente di avere domande, risposte e commenti generati dagli utenti. Ma eseguendo JavaScript arbitrario su una qualsiasi pagina di Programmers.SE? Non succederà.

StackOverflow ha una funzione snippet che rende effettivamente possibile eseguire JavaScript. Ma:

  • I frammenti non vengono eseguiti automaticamente: l'utente deve avviarli.

  • Non sarà facile ingannare una comunità di programmatori per lanciare uno snippet malevolo (con codice sorgente disponibile per il controllo prima dell'avvio), mantenendo un punteggio domanda / risposta positivo e nessun voto / flag ravvicinato.

  • XSS è impossibile.

  • I frammenti vengono eseguiti in iframe sandbox HTML5, il che significa che non possono disconnetterti dal tuo account StackOverflow e ingannarti nel fornire le tue credenziali a un hacker.

risposta data 09.06.2016 - 15:49
fonte