C'è un particolare punto debole di sicurezza nell'usare JavaScript sul lato server?

11

Non ho mai usato il lato server JavaScript, in realtà non sapevo nemmeno che sarebbe stato usato o utile lì. Ora che ho scoperto che è possibile e c'è una comunità abbastanza attiva, mi chiedo se ci sono alcuni svantaggi noti quando vengono utilizzati sul lato server.

Ci sono alcune ipotesi di cui dovrei essere a conoscenza sul modello sandbox? Dovrei preoccuparmi della stessa politica di origine applicata in genere dai browser o no?

    
posta smiley 07.09.2011 - 10:24
fonte

3 risposte

10

JavaScript è una lingua come qualsiasi altra lingua, come C e Java. È possibile eseguire Java sul PC desktop e anche sul server. Allo stesso modo, è possibile eseguire JavaScript su un server.

Node.js è una libreria I / O asincrona diffusa che utilizza il linguaggio JavaScript. Funziona molto bene in un ambiente server come evidenziato da GitHub e Klout .

Lo stesso criterio di origine è applicabile solo nei browser, ad esempio sul lato client. La sandbox è ancora nella lingua, nel senso che probabilmente non si verificherà un overflow del buffer. Non è la stessa sandbox implementata nei browser, cioè nessun accesso ai socket e nessun accesso ai file.

La linea di fondo è pensare a JavaScript come linguaggio generico.

Lo svantaggio da un punto di vista della programmazione è che l'interprete JavaScript viene eseguito a thread singolo. Ci potrebbero essere stati miglioramenti in questo settore. Da un punto di vista della sicurezza non ci sono probabilmente problemi di cui preoccuparsi.

    
risposta data 07.09.2011 - 11:14
fonte
2

Come sottolinea @Nam, Javascript è "solo" un linguaggio di programmazione come qualsiasi altro. Ha alcuni difetti che possono renderlo un po 'delicato da usare in un ambiente ostile, ad es. i suoi "numeri" sono in realtà valori in virgola mobile, quindi inizi a perdere un po 'di precisione quando vai oltre il limite di 2 53 : la "programmazione sicura" si occupa principalmente di assicurare che il codice reagisca correttamente quando riceve qualsiasi dato di input (anche dati di input non validi) e tale sfocatura nelle caratteristiche del linguaggio lo rendono un po 'più difficile. Non c'è nulla che possa rendere Javascript inadeguato per la programmazione lato server, ma probabilmente non è la lingua più semplice con cui costruire un server robusto.

    
risposta data 08.09.2011 - 08:58
fonte
2

Ho visto una costosa applicazione SaaS che consente agli utenti di caricare snippet di Javascript che verranno eseguiti lato server quando gli eventi vengono attivati. Questa è una funzionalità estremamente utile per questa app, ma ovviamente, poiché stanno eseguendo codice non affidabile caricato dagli utenti, sono sicuro che hanno sviluppato uno speciale ambiente di esecuzione Javascript limitato.

Questo è lo stesso problema che si incontra con linguaggi interpretati dinamici come Python o Ruby. Dovresti utilizzare le normali pratiche di sicurezza delle applicazioni quando puoi scrivere il tuo codice attendibile per l'esecuzione sul server, ma se stai eseguendo codice non affidabile dagli utenti, devi limitare l'interprete, ad esempio, dall'esecuzione di qualcosa come la funzione eval() di Python che potrebbe essere usato per sfuggire alla sandbox.

    
risposta data 08.09.2011 - 22:49
fonte

Leggi altre domande sui tag