Condividi tramite


Considerazioni aggiuntive sulla sicurezza in Windows Form

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 anche su altri aspetti dell'applicazione, tra cui l'accesso ai file e ai dati e la stampa. Per altre informazioni sull'accesso ai file e ai dati in un ambiente parzialmente attendibile, vedere Accesso ai file e ai dati più sicuri in Windows Form. Per ulteriori informazioni sulla stampa in un ambiente a fiducia parziale, vedere Stampa più Sicura in Windows Forms.

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 classe UIPermission controlla l'accesso agli Appunti e il valore di enumerazione UIPermissionClipboard associato indica il livello di accesso. Nella tabella seguente vengono illustrati i possibili livelli di autorizzazione.

Valore UIPermissionClipboard Descrizione
AllClipboard Gli Appunti possono essere usati senza restrizioni.
OwnClipboard La Clipboard può essere utilizzata con alcune restrizioni. La possibilità di mettere dati negli Appunti (operazioni di comando Copia o Taglia) non è soggetta a restrizioni. I controlli intrinseci che accettano operazioni di incolla, come una casella di testo, possono accettare dati negli Appunti, ma i controlli utente non possono leggere programmaticamente dal Clipboard.
NoClipboard Non è possibile utilizzare gli Appunti.

Per impostazione predefinita, l'area Intranet locale riceve l'accesso AllClipboard e l'area Internet riceve l'accesso OwnClipboard. Ciò significa che l'applicazione può copiare dati negli Appunti, ma l'applicazione non può incollare o leggere tramite codice dagli Appunti. Queste restrizioni impediscono ai programmi senza piena attendibilità di leggere il contenuto copiato nell'area degli appunti da un'altra applicazione. Se l'applicazione richiede l'accesso completo agli Appunti, ma non si dispone delle autorizzazioni, sarà necessario elevare le autorizzazioni per l'applicazione. Per altre informazioni sull'elevazione delle autorizzazioni, vedere Amministrazione generale dei criteri di sicurezza.

Manipolazione delle finestre

La classe UIPermission controlla anche l'autorizzazione per eseguire la manipolazione delle finestre e altre azioni correlate all'interfaccia utente e il valore di enumerazione UIPermissionWindow associato indica il livello di accesso. Nella tabella seguente vengono illustrati i possibili livelli di autorizzazione.

Per impostazione predefinita, l'area Intranet locale riceve l'accesso AllWindows e l'area Internet riceve l'accesso SafeTopLevelWindows. Ciò significa che nell'area Internet l'applicazione può eseguire la maggior parte delle azioni finestra e dell'interfaccia utente, ma l'aspetto della finestra verrà modificato. La finestra modificata visualizza una notifica a fumetto alla prima esecuzione, contiene testo modificato della barra del titolo e ha bisogno di un pulsante di chiusura sulla barra del titolo. La notifica a comparsa e la barra del titolo informano l'utente che l'applicazione è in esecuzione con attendibilità parziale.

Valore UIPermissionWindow Descrizione
AllWindows Gli utenti possono utilizzare tutte le finestre e gli eventi di input utente senza restrizioni.
SafeTopLevelWindows Gli utenti possono usare solo finestre di primo livello più sicure e finestre secondarie più sicure per il disegno e possono usare solo gli eventi di input utente per l'interfaccia utente all'interno di tali finestre di primo livello e finestre secondarie. Queste finestre più sicure sono chiaramente etichettate e hanno restrizioni minime e massime. Le restrizioni impediscono attacchi di spoofing potenzialmente dannosi, ad esempio la imitazione di schermate di accesso al sistema o il desktop di sistema e limitano l'accesso a livello di codice alle finestre padre, alle API correlate allo stato attivo e all'uso del controllo ToolTip,
SafeSubWindows Gli utenti possono usare solo finestre secondarie più sicure per il disegno e possono usare solo gli eventi di input utente per l'interfaccia utente all'interno di tale sottofinestra. Un controllo visualizzato all'interno di un browser è un esempio di una finestra secondaria più sicura.
NoWindows Gli utenti non possono usare alcuna finestra 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 valori SafeTopLevelWindows e SafeSubWindows. Per le autorizzazioni esatte necessarie per ogni membro, vedere le informazioni di riferimento per tale membro nella documentazione della libreria di classi .NET Framework.

SafeTopLevelWindows permesso limita le azioni elencate nella tabella seguente.

Componente Azioni con restrizioni
Application - Impostazione della proprietà SafeTopLevelCaptionFormat.
Control - Recupero della proprietà Parent.
- Impostazione della proprietà Region.
- Chiamare il metodo FindForm, Focus, FromChildHandle e FromHandle, PreProcessMessage, ReflectMessageo SetTopLevel.
- Chiamare il metodo GetChildAtPoint se il controllo restituito non è figlio del controllo chiamante.
- Modificare il focus di controllo all'interno di un controllo contenitore.
Cursor - Impostazione della proprietà Clip.
- Chiamata al metodo Hide.
DataGrid - Chiamata al metodo ProcessTabKey.
Form - Ottenimento della proprietà ActiveForm o MdiParent.
- Impostazione della proprietà ControlBox, ShowInTaskbaro TopMost.
- Impostare la proprietà Opacity al di sotto di 50%.
- Impostazione della proprietà WindowState su Minimized a livello di codice.
- Chiamata al metodo Activate.
- Uso dei valori di enumerazione None, FixedToolWindowe SizableToolWindowFormBorderStyle.
NotifyIcon - L'uso del componente NotifyIcon è completamente limitato.

Il valore SafeSubWindows limita le azioni elencate nella tabella seguente, oltre alle restrizioni poste dal valore SafeTopLevelWindows.

Componente Azioni con restrizioni
CommonDialog - Visualizzazione di una finestra di dialogo derivata dalla classe CommonDialog.
Control - Chiamata al metodo CreateGraphics.
- Impostazione della proprietà Cursor.
Cursor - Impostazione della proprietà Current.
MessageBox - Chiamata al metodo Show.

Ospitare controlli di terze parti

Un altro tipo di manipolazione delle finestre può verificarsi se i moduli ospitano controlli di terze parti. Un controllo di terze parti è qualsiasi controllo personalizzato UserControl che tu non hai sviluppato e compilato da te. Anche se lo scenario di hosting è difficile da sfruttare, è teoricamente possibile che un controllo di terze parti espanda l'area di rendering per coprire l'intera area del modulo. Questo controllo potrebbe quindi simulare una finestra di dialogo critica e richiedere informazioni quali combinazioni nome utente/password o numeri di conto bancario dagli utenti.

Per limitare questo potenziale rischio, usare controlli di terze parti solo dai fornitori che è possibile considerare attendibili. Se si usano controlli di terze parti scaricati da un'origine non verificabile, è consigliabile esaminare il codice sorgente per potenziali exploit. Dopo aver verificato che il codice sorgente non è dannoso, dovresti compilare l'assembly da solo per assicurarti che il codice sorgente corrisponda all'assembly.

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 alla finestra o al sistema operativo quando si utilizzano chiamate o valori dell'API di Windows. La classe SecurityPermission e il valore UnmanagedCode dell'enumerazione SecurityPermissionFlag controllano l'accesso 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 di Windows Form forniscono l'accesso non gestito che richiede l'autorizzazione UnmanagedCode. Nella tabella seguente sono elencati i membri dello spazio dei nomi System.Windows.Forms 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 - AddMessageFilter metodo
- CurrentInputLanguage proprietà
- Exit metodo
- ExitThread metodo
evento - ThreadException
CommonDialog - HookProc metodo
- OwnerWndProc\ metodo
- Reset metodo
- RunDialog metodo
Control - CreateParams metodo
- DefWndProc metodo
- DestroyHandle metodo
- WndProc metodo
Help - ShowHelp metodi
- ShowHelpIndex metodo
NativeWindow classe - NativeWindow
Screen - FromHandle metodo
SendKeys - Send metodo
- SendWait metodo

Se l'applicazione non dispone dell'autorizzazione per chiamare codice non gestito, l'applicazione deve richiedere l'autorizzazione UnmanagedCode oppure è necessario prendere in considerazione modi alternativi per implementare le funzionalità; in molti casi, Windows Form offre un'alternativa gestita alle funzioni API di Windows. Se non esistono mezzi alternativi e l'applicazione deve accedere al codice non gestito, sarà necessario elevare le autorizzazioni per l'applicazione.

L'autorizzazione per chiamare codice non gestito consente a un'applicazione di eseguire la maggior parte degli elementi. Pertanto, l'autorizzazione per chiamare codice non gestito deve essere concessa solo per le applicazioni provenienti da un'origine attendibile. In alternativa, a seconda dell'applicazione, la parte di funzionalità dell'applicazione che effettua la chiamata al codice non gestito può essere facoltativa o abilitata solo nell'ambiente di attendibilità completa. Per altre informazioni sulle autorizzazioni pericolose, vedere Autorizzazioni pericolose e Amministrazione dei criteri. Per altre informazioni sull'elevazione delle autorizzazioni, vedere Amministrazione generale dei criteri di sicurezza.

Vedere anche