Domanda - "D3 (js) ti consente di associare dati arbitrari a un DOM"

0

Ho una domanda relativa alla sicurezza per quanto riguarda d3.js

D3.js essenzialmente consente ai dati di guidare grafici dinamici, ecc., tra le altre caratteristiche.

La pagina di destinazione "d3js.org" menziona "D3 (js) ti consente di associare dati arbitrari a un DOM".

Funzioni come d3.csv.parse possono essere usate per leggere dati "arbitrari". Tuttavia, il grafico in questione si aspetterebbe determinati tipi di dati ecc.

Una tale libreria può davvero accettare dati "arbitrari" da utenti anonimi? Un utente può potenzialmente analizzare dati accuratamente elaborati per produrre un risultato imprevisto con D3? (cioè, l'esecuzione JS autorizzata).

Quale può essere la migliore pratica qui per voler analizzare arbitrariamente a D3?

    
posta STM 06.10.2015 - 03:10
fonte

2 risposte

1

EDIT: Non posso commentare la domanda da quando sono stato bloccato dal mio vecchio account e non ho abbastanza reputazione ... Tutto quanto segue vale anche per i dati. Nulla sul lato client è sotto il tuo controllo. Sono confuso sul perché non ti preoccupi del codice arbitrario, ma solo dei dati arbitrari. In generale, la possibilità di modificare il codice fornisce più potenza per produrre risultati "inaspettati" rispetto alla possibilità di modificare i dati. Forse dovresti spiegare esattamente di cosa sei preoccupato. Puoi chiarire cosa intendi per "esecuzione JS autorizzata"?

Se capisco la tua domanda, penso che tu stia chiedendo se un utente può modificare arbitrariamente il tuo javascript sul lato client, per esempio per modificarlo, a loro piacimento. La risposta è un sonoro sì. Dai un'occhiata a Greasemonkey , ad esempio. In generale, tutto ciò che è in esecuzione sul client è sotto il loro controllo. Ci sono stati molti tentativi di creare sistemi lato client che impediscono questo genere di cose, ma funzionano davvero solo se il client decide di usarli. Qualsiasi utente tecnicamente sofisticato sarà in grado di disabilitare queste opzioni.

Dovresti mai mettere alcun tipo di logica sensibile sul lato client. Tutti gli input provenienti dal client devono essere considerati potenzialmente malformati o manipolati in altro modo per motivi nefasti.

C'è stato un decennio di casi in cui un sito Web di vendita al dettaglio ha preso il prezzo di un articolo come input dal POST del cliente. Un utente ha visto questo e ha presentato un prezzo di $ 0,01 e ha ordinato un mucchio di articoli. Il sito web ha debitamente eseguito l'ordine come presentato. È andato in tribunale e il caso è stato pronunciato contro il sito web. Cioè, non era nemmeno illegale.

    
risposta data 06.10.2015 - 18:44
fonte
0

What happens if you allow users to create any data they wish.. which in-turn is then fed to the JS? Could crafted data somehow cause the JS code to generate undesired results?

Tutto ciò si riduce a quanto ti fidi della libreria. Cioè, confidando che non stia facendo nulla di malvagio, e confidando che non ci siano bug sfruttabili che permetterebbero quanto sopra.

Se stai scaricando il codice sorgente, puoi controllarlo per assicurarti che abbia poche possibilità di essere il primo. Quest'ultimo è più difficile da rilevare, anche se è improbabile a meno che non ci sia uso di eval o simili da qualche parte (ci sono diversi modi per eseguire codice arbitrario, anche se eval non è usato).

Se si sta collegando alla libreria sul proprio sito utilizzando <script src="... , si ha fiducia che non aggiornino la libreria con una versione malevola, o che il loro sito non sia compromesso e che un utente malintenzionato non sostituisca la libreria con una versione malevola.

Tutto sommato dovrebbe essere un rischio basso, soprattutto se si ospita la libreria da soli e la revisione del codice prima di eseguire il miniting se necessario.

    
risposta data 07.10.2015 - 19:26
fonte

Leggi altre domande sui tag