Considerazioni aggiuntive sulla sicurezza in Windows Forms
Le impostazioni di sicurezza di .NET Framework potrebbero causare l'esecuzione dell'applicazione in modo diverso in un ambiente parzialmente attendibile rispetto al computer locale. .NET Framework limita l'accesso a risorse locali critiche come il file system, la rete e le API non gestite, tra le altre cose. Le impostazioni di sicurezza influiscono sulla possibilità di chiamare l'API Di Microsoft Windows o altre API che non possono essere verificate dal sistema di sicurezza. La sicurezza influisce inoltre su altri aspetti dell'applicazione, inclusi l'accesso ai file e ai dati e la stampa. Per altre informazioni sull'accesso a file e dati in un ambiente ad attendibilità parziale, vedere More Secure File and Data Access in Windows Forms (Accesso più sicuro a file e dati in Windows Form). Per altre informazioni sulla stampa in un ambiente ad attendibilità parziale, vedere More Secure Printing in Windows Forms (Stampa più sicura in Windows Form).
Le sezioni seguenti illustrano come usare gli Appunti, eseguire la manipolazione delle finestre e chiamare l'API Windows dalle applicazioni in esecuzione in un ambiente parzialmente attendibile.
Accesso agli Appunti
La UIPermission classe controlla l'accesso agli Appunti e il valore di enumerazione associato UIPermissionClipboard indica il livello di accesso. Nella tabella seguente sono elencati i livelli di autorizzazione possibili.
Valore UIPermissionClipboard | Descrizione |
---|---|
AllClipboard | È possibile usare gli Appunti senza restrizioni. |
OwnClipboard | È possibile usare gli Appunti con alcune restrizioni. Possibilità di inserire dati negli Appunti (operazioni dei comandi Copia o Taglia) senza restrizioni. I controlli intrinseci che accettano operazioni Incolla, ad esempio una casella di testo, possono accettare i dati negli Appunti, ma i controlli utente non possono leggere a livello di codice dagli Appunti. |
NoClipboard | Impossibile usare gli Appunti. |
Per impostazione predefinita, l'area Intranet locale riceve AllClipboard l'accesso e l'area Internet riceve OwnClipboard l'accesso. Ciò significa che l'applicazione può copiare dati negli Appunti, ma non può incollare negli Appunti o leggere dagli Appunti a livello di codice. Queste restrizioni impediscono ai programmi senza attendibilità totale di leggere il contenuto copiati negli Appunti da un'altra applicazione. Se l'applicazione richiede l'accesso completo agli Appunti ma non disporre delle autorizzazioni, sarà necessario elevarne le autorizzazioni. Per altre informazioni sull'elevazione delle autorizzazioni, vedere General Security Policy Administration (Amministrazione generale dei criteri di sicurezza).
Modifica delle finestre
La UIPermission classe controlla anche l'autorizzazione per eseguire la manipolazione delle finestre e altre azioni correlate all'interfaccia utente e il valore di enumerazione associato UIPermissionWindow indica il livello di accesso. Nella tabella seguente sono elencati i livelli di autorizzazione possibili.
Per impostazione predefinita, l'area Intranet locale riceve AllWindows l'accesso e l'area Internet riceve SafeTopLevelWindows l'accesso. Ciò significa che, nell'area Internet, l'applicazione può eseguire la maggior parte delle azioni legate a finestre e interfaccia utente, con conseguente modifica dell'aspetto della finestra. La finestra modificata visualizza una notifica alla prima esecuzione, contiene testo modificato nella barra del titolo e richiede un pulsante di chiusura nella medesima barra. La notifica e la barra del titolo indicano all'utente dell'applicazione che quest'ultima è in esecuzione ad attendibilità parziale.
Valore UIPermissionWindow | Descrizione |
---|---|
AllWindows | Gli utenti possono usare tutte le finestre e tutti gli eventi input utente senza restrizioni. |
SafeTopLevelWindows | Gli utenti possono usare solo le più sicure finestre principali e secondarie per il disegno e possono usare solo gli eventi input utente dell'interfaccia all'interno di tali finestre. Queste finestre sicure sono contrassegnate in modo chiaro e dispongono di restrizioni per la dimensione minima e massima. Le restrizioni impediscono attacchi di spoofing potenzialmente dannosi, ad esempio la imitazione delle schermate di accesso al sistema o il desktop di sistema e limita l'accesso a livello di codice alle finestre padre, alle API correlate allo stato attivo e all'uso del ToolTip controllo, |
SafeSubWindows | Gli utenti possono usare solo le più sicure finestre secondarie per il disegno e possono usare solo gli eventi input utente dell'interfaccia all'interno di tali finestre. Un controllo visualizzato all'interno di un browser è un esempio di finestra secondaria sicura. |
NoWindows | Gli utenti non possono usare finestre o eventi dell'interfaccia utente. Non è possibile usare l'interfaccia utente. |
Ogni livello di autorizzazione identificato dall'enumerazione UIPermissionWindow consente un minor numero di azioni rispetto al livello superiore. Le tabelle seguenti indicano le azioni limitate dai SafeTopLevelWindows valori e SafeSubWindows . Per le autorizzazioni esattamente necessarie per ogni membro, vedere il riferimento per tale membro nella documentazione della libreria di classi .NET Framework.
SafeTopLevelWindows l'autorizzazione limita le azioni elencate nella tabella seguente.
Componente | Azioni limitate |
---|---|
Application | - Impostazione della proprietà SafeTopLevelCaptionFormat. |
Control | - Recupero della Parent proprietà. - Impostazione della proprietà Region .- Chiamata al FindForm metodo , Focuse FromHandleFromChildHandle , PreProcessMessageReflectMessage, o SetTopLevel . - Chiamata al GetChildAtPoint metodo se il controllo restituito non è un elemento figlio del controllo chiamante. - Modifica del focus del controllo all'interno di un controllo contenitore. |
Cursor | - Impostazione della proprietà Clip. - Chiamata al Hide metodo . |
DataGrid | - Chiamata al ProcessTabKey metodo . |
Form | - Recupero della ActiveForm proprietà o MdiParent . - Impostazione della ControlBoxproprietà , ShowInTaskbaro TopMost . - Impostazione della proprietà al di sotto del Opacity 50%. - Impostazione della WindowState proprietà su a Minimized livello di codice. - Chiamata al Activate metodo . - Uso dei Nonevalori di enumerazione , FixedToolWindowe SizableToolWindowFormBorderStyle . |
NotifyIcon | - L'uso del NotifyIcon componente è completamente limitato. |
Il SafeSubWindows valore limita le azioni elencate nella tabella seguente, oltre alle restrizioni applicate dal SafeTopLevelWindows valore .
Componente | Azioni limitate |
---|---|
CommonDialog | - Visualizzazione di una finestra di dialogo derivata dalla CommonDialog classe . |
Control | - Chiamata al CreateGraphics metodo . - Impostazione della proprietà Cursor. |
Cursor | - Impostazione della proprietà Current. |
MessageBox | - Chiamata al Show metodo . |
Hosting di controlli di terze parti
Se i moduli ospitano controlli di terze parti, può verificarsi un altro tipo di modifica delle finestre. Un controllo di terze parti è qualsiasi personalizzato UserControl che non è stato sviluppato e compilato manualmente. Sebbene lo scenario di hosting sia difficile da sfruttare, un controllo di terze parti può almeno in teoria espandere la propria superficie di rendering per coprire l'intera area del modulo. Il controllo potrebbe quindi imitare una finestra di dialogo critica e richiedere informazioni come combinazioni di nome utente e password o numeri di conti corrente degli utenti.
Per limitare questo rischio, usare solo controlli di terze parti considerati attendibili. Se si usano controlli di terze parti scaricati da origini non verificabili, si consiglia di esaminarne il codice sorgente alla ricerca di exploit potenziali. Dopo aver verificato che l'origine non è dannosa, compilare l'assembly da sé per assicurarsi che l'origine corrisponda.
Chiamate API Windows
Se la progettazione dell'applicazione richiede la chiamata di una funzione dall'API Windows, si accede al codice non gestito. In questo caso non è possibile determinare le azioni del codice nella finestra o nel sistema operativo quando si utilizzano chiamate o valori dell'API Di Windows. La SecurityPermission classe e il valore dell'enumerazione controllano l'accesso UnmanagedCodeSecurityPermissionFlag al codice non gestito. Un'applicazione può accedere al codice non gestito solo quando viene concessa l'autorizzazione UnmanagedCode . Per impostazione predefinita, solo le applicazioni in esecuzione in locale possono chiamare codice non gestito.
Alcuni membri Windows Form forniscono l'accesso non gestito che richiede l'autorizzazioneUnmanagedCode. Nella tabella seguente sono elencati i membri dello spazio dei System.Windows.Forms nomi che richiedono l'autorizzazione . Per altre informazioni sulle autorizzazioni necessarie per un membro, vedere la documentazione della libreria di classi .NET Framework.
Componente | Membro |
---|---|
Application | Metodo - AddMessageFilter Proprietà - CurrentInputLanguage Metodo - Exit Metodo - ExitThread Evento- ThreadException |
CommonDialog | Metodo - HookProc - OwnerWndProc\Metodo Metodo - Reset Metodo - RunDialog |
Control | Metodo - CreateParams Metodo - DefWndProc Metodo - DestroyHandle Metodo - WndProc |
Help | Metodi - ShowHelp Metodo - ShowHelpIndex |
NativeWindow | Classe - NativeWindow |
Screen | Metodo - FromHandle |
SendKeys | Metodo - Send Metodo - SendWait |
Se l'applicazione non dispone dell'autorizzazione per chiamare codice non gestito, l'applicazione deve richiedere UnmanagedCode l'autorizzazione oppure è necessario prendere in considerazione modi alternativi per implementare le funzionalità. In molti casi, Windows Form fornisce un'alternativa gestita alle funzioni API di Windows. Se non esistono metodi alternativi e l'applicazione deve accedere a codice non gestito, sarà necessario elevare le autorizzazioni per l'applicazione.
L'autorizzazione a chiamare codice non gestito consente a un'applicazione di eseguire praticamente qualsiasi operazione. Fornire pertanto tale autorizzazione solo alle applicazioni provenienti da fonti attendibili. In alternativa, a seconda dell'applicazione, la caratteristica che esegue la chiamata al codice non gestite potrebbe essere facoltativa oppure abilitata solo in un ambiente ad attendibilità totale. Per altre informazioni sulle autorizzazioni pericolose, vedere Autorizzazioni pericolose e amministrazione dei criteri. Per altre informazioni sull'elevazione delle autorizzazioni, vedere General Security Policy Administration (Amministrazione generale dei criteri di sicurezza).
Vedi anche
.NET Desktop feedback