2009-07-21 16 views

risposta

6

Riflessione permette codice maligno per ispezionare tutti i tipi di segreti: non tanto la proprietà intellettuale (anche se sicuro, anche questo), ma dati che dovrebbero essere privati ​​e sicuri, come stringhe di connessione, password, dati del conto bancario, ecc.

Naturalmente, molti programmi espongono questi dati come un dato di fatto attraverso ancora di più - vettori facilmente compromessi, ma non c'è motivo di aumentare la superficie di attacco di un'applicazione.

A cura di portare un po di conversazione fino dai commenti:

E 'probabilmente vero che il rischio reale è senza restrizioni l'accesso ai file di sistema, che è ciò che trasforma la riflessione in un vero e proprio pericolo. Se un cattivo attore può ottenere un assembly (o qualcosa che viene compilato in un assembly) nella tua directory virtuale, sei nei guai se hanno il permesso di riflessione. (Naturalmente se ciò accade, ci sono anche altri potenziali problemi, ma non dovrebbe scartare questa particolare vulnerabilità.)

In un ambiente di hosting condiviso che è solo più difficile da prevenire, anche se certamente non è impossibile. Forse vale la pena di passare questa domanda allo ServerFault per vedere cosa hanno da dire i bravi ragazzi.

+0

Non capisco del tutto come funzioni. Ad esempio, in un ambiente di hosting condiviso come potrei accedere agli assiemi di un altro cliente? Come utilizzerei la riflessione per ispezionare il contenuto di proprietà e metodi privati? –

+2

Se si sta eseguendo (ad esempio) un progetto di sito web, piuttosto che un progetto di applicazione Web e si fornisce all'utente un modo per caricare file sul proprio sito, è possibile caricare una pagina ASPX che viene compilata quando viene chiamata, se tale Riflessione utilizzata per leggere lo stato dell'applicazione, quindi è possibile che le stringhe di connessione ecc. possano essere accessibili. È una possibilità sottile, ma non per questo meno, da qui il "potrebbe" nel tuo link. Non dimenticare che alcuni host non sempre eseguono un ambiente di trust medio "vanilla", ma personalizzano le funzionalità che sono e non sono disponibili. –

+1

Ben mi ha battuto. Aggiungerò solo un'altra cosa: in un ambiente di hosting condiviso, erediti (alcune delle) vulnerabilità di sicurezza delle altre applicazioni in esecuzione sul tuo server, quindi i tuoi colleghi non devono nemmeno essere maliziosi per rappresentare un pericolo per tu, solo negligente. –

4

non ho mai trovato niente di 'cattivo' che un utente sarà in grado di fare utilizzando la riflessione. Le persone si spaventano perché riesci a chiamare metodi che sono contrassegnati come privati ​​o protetti, ma da quello che ho visto, nessuno di loro impone alcun rischio reale.

Molto probabilmente, è almeno in parte una tecnica di vendita per arrivare a sborsare per (semi) hosting dedicato :)

3

ho trovato il seguente articolo di MSDN su questo argomento:

Security Considerations for Reflection

risposta di Jeff Questo articolo di eco:

Riflessione offre la possibilità di ottenere informazioni sui tipi e membri e per accedere ai membri. L'accesso ai membri non pubblici potrebbe creare un rischio per la sicurezza. Pertanto, il codice che accede ai membri non pubblici richiede ReflectionPermission con i flag appropriati .

Tuttavia, non credo che questo rischio possa essere sfruttato tra gli account di hosting del cliente. Sembra che questo rappresenterebbe solo un rischio personale. Ad esempio, usando la reflection potrei esplorare i miei propri assembly nel mio ambiente di hosting.Altri clienti, tuttavia, non hanno potuto utilizzare la riflessione per esplorare gli assembly my. Potrebbero esplorare solo gli loro assembly.

Questo potrebbe rappresentare un problema per una singola applicazione Web che coinvolge più team di sviluppo. Un team di sviluppo potrebbe utilizzare la riflessione per esplorare gli altri gruppi del team di sviluppo.

Tuttavia, questo è uno scenario raro per un ambiente di hosting condiviso. La maggior parte dei siti di hosting condiviso coinvolge un team molto piccolo che ha accesso completo allo al codice. In altre parole, non ci sono segreti. Finché l'assemblaggio è al sicuro da altri clienti di hosting condiviso, non è un problema.

attivazione di riflessione non dovrebbe porre alcun rischio per le applicazioni di web hosting più comune:

<IPermission class="ReflectionPermission" version="1" Flags="RestrictedMemberAccess"/> 

favore correggetemi se sbaglio.

+0

Se l'accesso all'applicazione Web è stato compromesso, è possibile utilizzare la riflessione per esplorare le stringhe di connessione del database e altre informazioni sensibili. È un trade-off. Quanto è importante che un'applicazione sia protetta da se stessa? –

+0

a dire il vero questo mi ha lasciato con più domande. Anche se hai confermato che ci sono problemi di sicurezza con un buon riferimento. Sono rispettosamente in disaccordo con te sullo scenario di attacco, anche se non ne ho uno migliore, quindi non posso parlare schiaffo. – rook

Problemi correlati