Domanda

Html può contenere piccoli frammenti di Javascript incorporati (ad es. definiti nei gestori di eventi onclick ).

  1. Se stavo scrivendo un browser Html usando un linguaggio dotNet come C #, quali tecnologie o API potrei usare per eseguire tali frammenti Javascript, dato che non lo ricevo fino al runtime (e lo ricevo come dati stringa, non come codice eseguibile)?

  2. È più facile o più difficile se il codice da eseguire fosse snippet C # anziché Javascript?

  3. Esiste una tecnica che non richiede che il mio codice abbia privilegi insoliti? Ad esempio, un metodo come CodeCompiler.FromSource richiede SecurityPermissionFlag.UnmanagedCode (il che mi sembra eccessivo: non vedo perché sia ??così rischioso compilare il codice).

  4. Se controllassi il codice lato server e lato client, potrei anche prendere in considerazione la compilazione di tali frammenti di script sul server anziché sul client e quindi inviarlo come codice precompilato sul lato client essere giustiziato. Esiste un modo per inviare tale codice (un assembly dotNet, presumibilmente) attraverso la rete al client, fare in modo che il codice lato client lo riceva dalla rete nella RAM lato client e invocarlo sul lato client senza archiviarlo come file su un'unità disco lato client?


Modifica

Ho una risposta alle prime tre domande: mi sono rassegnato al fatto che la compilazione richiede privilegi elevati. Non vedo perché; forse (anche se non lo trovo un motivo molto convincente) è perché il compilatore è implementato usando un codice non gestito. Forse questo cambierà quando reimplementeranno il compilatore usando il codice gestito, forse nella versione " C # 5 " lasso di tempo. In ogni caso, qualunque sia la ragione, sembra che sia così e non ci sono soluzioni alternative (altre API simili ma che richiedono meno privilegi).

La mia domanda rimanente è quindi come ottenere un'istanza di Assembly da una macchina all'altra. Quando ho tempo, scoprirò se il codice non attendibile può eseguire il metodo Assembly.Load (byte [] rawAssembly) .

È stato utile?

Soluzione

  1. Lato server Javascript è una delle lingue supportate dalla piattaforma .NET. L'ho usato molte volte negli scenari quando è necessario inserire piccoli frammenti di codice nel codice esistente. Il runtime può essere caricato dal database e compilato, quindi non vi è alcuna penalità di preformance.

  2. Dal punto di vista del funzionamento dell'impianto idraulico (recupero della sorgente, compilazione, ecc.) non c'è alcuna differenza. Con linguaggi fortemente tipizzati, sebbene sia molto più difficile assemblare frammenti di codice in un'unità di compilazione compilabile.

  3. Le autorizzazioni sono certamente una sfida. Non sono sicuro dell'autorizzazione specifica che hai menzionato, ma la sicurezza è una preoccupazione, dopo che tutta la fonte che compili può essere qualsiasi cosa e se non stai attento alla fonte del tuo codice, può diventare la backdoor nel tuo sistema

  4. La risposta a questa è: sì, certo. Puoi caricare un assembly da qualsiasi luogo, non necessariamente da un file, ma puoi anche compilare in memoria: è quello che faccio. Non esiste un file dll in questo caso.

Altri suggerimenti

Stai facendo diverse domande, una sorta di, quindi ti darò un'idea su una di esse. C'è un ottimo articolo e alcuni esempi di codice da: http://www.west-wind.com/presentations/dynamicCode/DynamicCode. htm che parla della compilazione e dell'esecuzione del codice C # in fase di esecuzione. L'ho trovato molto utile e lo sto usando in un'applicazione c # standard. Sembra che sarebbe utilizzabile anche per il tuo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top