.NET Security
La sicurezza nella applicazioni .NET è uno delle sfide maggiormente impegnative che ogni programmatore affronte quotidianamente. Questa categoria si vuole porre come strumento utile a tutte quelle persone che per passione o per motivi professionali vogliono rendere le loro applicazioni Sicure.
Essere a casa influenzato non porta solo svantaggi. Solo ora, ho trovato, un errore all'interno di una mia vecchia, ma ancora funzionante applicazione.
Ecco la classe
public class ValidateUser
{
[PrincipalPermission(SecurityAction.Demand, Name=@"mainServer\Administrator")]
public void AdminsOperations()
{
// codice...
}
}
Il codice sembra corretto, e guardandolo così com'è non si nota alcun tipo di errore. In realtà l'errore c'è ma non si vede. Come la maggior...
Nei precedenti post ho parlato degli oggetti IIDentity e IPrincipal. Quello di cui non abbiamo parlato sono i loro attributi e come utilizzarli per evitare di eseguire codice nel caso in cui l'utente non sia correttamente autorizzato. Nel caso si voglia proprio realizzare una struttura di questo tipo è necessario andare a lavorare sulla permission PrincipalPermission insieme ad alcuni suoi attribiti (PrincipalPermissionAttribute). PrincipalPermission ha tre proprietà da valorizzare. Authenticated Name Role Il loro funzionamento è presto illustrato dallo snippet di codice che segue.
[PrincipalPermission(SecurityAction.Demand, Role="TrustedUsers")]
private static void RunTrustedUsersCode()
{
Console.WriteLine("Waaa appartengo al gruppo TrustedUsers!");
}
Il metodo RunTrustedUsersCode può essere eseguito...
Come si può facilmente intendere dal nome, una WindowsIdentity identifica uno specifico utente Windows. La maggiore differenza che si può incontrare facendo la comparazione tra WindowsIdentity e GenericIdentity sta nella costruzione dell'oggetto. Una WindowsIdentity si propone con quattro costruttori, il primo argomento di questi è di tipo IntPtr. IntPtr windowsToken /* =...*/;
IIdentity windowsUser = new WindowsIdentity(windowsToken, "NTLM",
WindowsAccountType.Normal, true);
Questo esempio mostra come il costruttore usi più argomenti. Il secondo argomento è dato dalla tipologia di autentificazione. Il terzo invece è valore di enumerazione di tipo WindowsAccountType, il quale,...
Dando per scontato il nostro skill sul funzionamento delle identità nel mondo Microsoft .NET Framework, andremmo ora a coprire l'importantissimo argomento dell'interfaccia IPrincipal.
Formata da due membri:
Identity: una proprietà Read-Only legata alla Principal
IsInRole: un metodo che informa se Principal appartiene ad uno specificato gruppo.
.NET espone due implementazioni di IPrincipal: GenericPrincipal e WindowsPrincipal, e proprio di queste andremmo a parlare.
GenericPrincipal è l'implementazione più semplice di IPrincipal. Per crearne una è necessario sottoporre un oggetto basato su una interfaccia IIdentity accompagnato da una lista di ruoli alla quale essa appartiene. Per esempio..
string[] roles = {"administrators", "developers"};
IIdentity soloNome = new GenericIdentity("amarziali");
GenericPrincipal genericPrincipal =
...
L'interfaccia IIdentity è usata per definire informazioni relative all'utente. Generalmente, l'utente che sta eseguendo il codice. IIdentity definisce tre proprietà read-only: Name : Una stringa che definisce il nome logico dell'utente nel formato dominio\nome. AuthenticationType : Una stringa che definisce la tipologia di autentificazione usata per verificare l'utente (per esempio Kerebos e Passport). IsAuthenticated : Un valore booleano che indica lo stato di autentificazione dell'utente. .NET fornisce queste quattro implentazioni di IIdentity: GenericIdentity (sec30) WindowsIdentity (sec31) FormsIdentity (sec32) PassportIdentity (sec33) Per ora parleremo di GenericIdentity. Come specificato dal nome GenericIdentity non è direttamente collegato ad alcun protocollo per...
Riapro la serie .NET Security con un post, a mio modo di vedere, importante. Stiamo parlando della sicurezza di .NET ed il suo inevitabile scontro con la sicurezza del sistema operativo. Come abbiamo avuto modo di vedere, .NET ha molto da offrire quando si parla di permessions e di sicurezza in generale, tuttavia questo non significa che .NET sia immune o superiore alle policy di sicurezza definite dal sistema operativo. Ragionando per esempi, inviterei a verificare il funzionamento del seguente metodo. [method: FileIOPermission(SecurityAction.Demand,Write = IMAGE_DIR)]public void SalvaImmagine(string NomeImmagine){ FileName = IMAGE_DIR + NomeImmagine if(true == File.Exists(NomeImmagine)) { File.Delete(NomeImmagine)); } ...
Durante l'analisi di un nuovo progetto, qualcuno (ndr guardandomi) ha posto la seguente domanda."Cosa significa chiedere i permessi per svolgere una determinata azione in un contesto generico applicativo? "
La risposta a questa domanda può sembrare decisamente semplice, tuttavia non è proprio così ovvia. Pertanto, ho proposto di aprire un dibattito al riguardo. Ogniuno ha espresso la sua opinione ed il risultato generale è stato che, per richiesta di permessi s'intende il reclamare il permesso ad eseguire una determinata operazione su un determinato componente. La mia reazione è stata piuttosto inusuale, ho chiesto di realizzare un semplice snippet che chiamasse un metodo di...
Ultimamente sto postando poco, è vero, problemi di grande importanza mi stanno allontanando dal blog. Ma a parte questo, che non è il motivo di questo post, volevo informarvi che da circa quattro giorni sto lavorando ad una whitepaper che rilascerò (spero) la prossima settimana. Il titolo è in fase di definizione, ma i contenuti iniziano ad essere molti. Si parla di sicurezza delle web applications ed in generale dell'amministrazione remota dei contenuti (le famose aree admin). Tutto questo nasce con l'idea di sensibilizzare Programmatori/PM/Clienti riguardo ai problemi derivati da uno sviluppo non orientato alla sicurezza. Attualmente i contenuti sono :
Remote Code Execution
Come proteggersi dai Google...
Dopo l'introduzione fatta in precedenza, andiamo a scoprire definitivamente il significato dei NamedPermissions Set. Sia chiaro, il loro utilizzo non è che faccia la differenza.. ma sicuramente può aiutarci a sviluppare con maggiore ordine. Dopo essermi fatto le mie personali convinzioni entriamo nel tecnico.
Come abbiamo capito, il permissions set ritornato dall'evidence dell'assembly in esecuzione non contiene tutte le permissions che ci sono state assegnate dai code groups. Per esempio, potrei usare l'oggetto FileStream senza problemi, ma l'oggetto FileIOPermissions non verrà mostrato nel permission set associato. Per riuscire a visualizzare tutte le permissions c'è da svolgere un lavoro in più. Il come lo vedremo nel prossimo post....
E' vero; avevo detto che
avrei parlato di ben altre cose, ma rileggendo la serie di post mi
sono accorto che stavo tralasciando una parte molto
importante. I Named Permissions Sets
. Cosa sono e come funzionano lo scopriremo
nel prossimo post (sec 27). Ho scelto questa scaletta per facilitare la lettura
a chi non avesse familiarità con i Permissions Sets.Come si può ben intuire
un Set di Permissions è l'unione di due o più Permissions che un assembly può
avere. Ricordiamoci sempre che esistono differenti policies,
ogniuna delle quali con differenti code groups...
Dopo un periodo di tempo non proprio breve vorrei ricominciare, o meglio ripartire, con la mia serie di post relativi alla sicurezza nel mondo .NET. Vorrei comunque concedermi il tempo di ringraziare tutte le persone che leggono, ed apprezzano, i post che vengono trattati in questo blog. Grazie.In security 26,27,28 andremo a parlare delle permissions e di altri concetti molto interessanti del mondo .NET Security. Come tutti sappiamo, una permission è una classe che definisce cosa una entità può e non può fare. Come si può notare dal codice che segue: questa classe deve implementare l'interfaccia IPermission, la quale è presente nello spazio...
Mentre .NET supporta pienamente classi per le specifiche
XML in fatto di firme, per la Codifica non esiste nessuna classe specifica..
nemmeno una.Attenzione, questo
non significa che operazioni di codifica risultino impossibili.. anzi.
Ricordiamoci delle classi di Cryptography viste nei precedenti
post.
Continuando a prendere come esempio il file xml (Sec22 e Sec23)
andiamo a vedere come possiamo trattare questo nodo al fine di codificarlo.
Dando per scontato la totale assenza di una chiave, la prima cosa che dobbiamo
fare è quella di andarla a creare. Per fare questo avremmo bisogno di creare una
chiave simmetrica, codificarla e rendere il risultato codificato in...
Per vedere come usare le classi Cryptography.XML per firmare files XML,
procediamo a firmare l'elemento Pagamento con una chiave privata RSA. Si suppone
che questo file contenga informazioni importanti che non vogliamo rendere
leggibili in plain text (testo semplice).Per prima cosa carichiamo
l'elemento Pagamento dal file XML interessato. Come tutti sappiamo .NET mette a
disposizione strumenti potenti per l'elaborazione dei files XML, questi sono
inclusi nello spazio di nomi (namespace) System.XML.Iniziamo con il
codice
String appPath = Application.StartupPath;XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(appPath + @"\Ordine.XML");XmlNodeList paymentElems = xmlDoc.SelectNodes("Ordine/Pagamento"));
Supponendo che la nodelist sia composta da un solo
elemento, creiamo un l'oggetto signedXml che andrà a contenere le
informazioni sul pagamento grazie ad un data object.
SignedXml signedXml = new SignedXml();System.Security.Cryptography.Xml.DataObject paymentInfo = new System.Security.Cryptography.Xml.DataObject();paymentInfo.Data = paymentElems;paymentInfo.Id = "OrdinePagamento";signedXml.AddObject(paymentInfo);
A...
Tramite la contact form mi è stato chiesto come mai
molti programmatori parlano ed utilizzano XML per le proprie applicazioni
ed il perchè nessuno applica sistemi di protezione su XML. Visto che ho affrontato l'argomento alcuni mesi indietro per un importante progetto.. beh facciamola a modo nostro.. blogghiamoci sopra ;).
Prendendo spunto da questo “gradito” messaggio,
inauguriamo l’inizio dei post relativi ad XML e Sicurezza. Il tutto sempre
trovando il giusto collegamento con .NET.
Bene tutti quanti sappiamo come e perché funziona
XML, pertanto possiamo subito partire a parlare di cose interessanti. Prendiamo
d’esempio questo file XML seguente.
<Order> <Items> <Item ID="123456789"> <Description>SuperEfficient GC</Description> <Price>0.99</Price> </Item> </Items> <Payment Method="Credit" Type="HighInterest"> <Number>7890123456789012</Number> <ExpirationDate>12/12/2003</ExpirationDate> </Payment></Order>
Il problema vero e proprio non...
Con il post [Security 21] entriamo nella zona
Certificati Digitali.Come si vedrà più avanti, la classe X509Certificate non crea certificati, ma si
limita unicamente ad analizzarli. Tuttavia, per avere un certificato su cui
lavorare non è per forza necessario avere una CA (Certification Authority). NET
viene distribuito con il Certificate Creation tool
(makecert.exe).Creiamo quindi il nostro certificato su cui andremo a
lavorare più avanti
makecert "c:\IMieiCertificatiSonBelli\UgiCert.cer"
Prestate attenzione al fatto che makecert dispone di una
considerevole quantità di opzioni di esecuzione disponibili. Possiamo
creare i certificati con quasi tutte le informazioni che vogliamo. Per esempio è
possibile specificare il Subject Name con il l'opzione di...
Per codificare\decodificare informazioni, vengono utilizzati i metodi CreateEncryptor() o CreateDecryptor() della classe SymmetricAlgorithm. Esistono due versioni di questi metodi: uno senza alcun tipo di parametro richiesto (parameterless) ed un secondo che richiede due byte di array, i quali, rappresentano il IV e la chiave per il processo di codifica. In entrambe i casi, il valore di ritorno è una interfaccia ICryptoTransform. Al netto di ciò, come segue, possiamo usare direttamente CryptoStream per rendere il nostro lavoro più facile.
1 String adPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;2 FileStream fin = new FileStream(adPath + @"\jcfileIN.txt",3 FileMode.Open, FileAccess.Read);4 MemoryStream mout = new MemoryStream();5 byte[] finData = new byte[fin.Length];6 7 SymmetricAlgorithm rijn = Rijndael.Create();8 CryptoStream coutenc = new CryptoStream(mout, rijn.CreateEncryptor(),9 CryptoStreamMode.Write);10 fin.Read(finData, 0, (int)fin.Length);11 coutenc.Write(finData, 0, (int)fin.Length);12 coutenc.FlushFinalBlock();13 14 FileStream fdec = new FileStream(adPath + @"\jcfileOUT.txt",15 FileMode.OpenOrCreate, FileAccess.Write);16 17 CryptoStream coutdec = new CryptoStream(fdec, rijn.CreateDecryptor(),18 CryptoStreamMode.Write);19 coutdec.Write(mout.GetBuffer(), 0, (int)(mout.Length));20 coutdec.Close();21
Ok parliamoci chiaro, questo codice può sembrare molto simile a quello postato in uno dei precedenti post, tuttavia c'è un particolare che dovrebbe...
Come abbiamo visto nei precedenti post esistono due tipologie di algoritmi di codifica : Simmetrici e Asimmetrici. Vediamo come utilizzarli all'interno del mondo .NET
Chiavi Simmetriche
Cryptography definisce una classe astratta chiamata SymmetricAlgorithm dalla quale tutte le implementazioni di algoritmi simmetrici dovrebbero discendere. Questa classe viene utilizzata per referenziare un oggetto a runtime come mostrato qui di seguito.
SymmetricAlgorithm symAlg = new RijndaelManaged();
.NET 1.1 ha quattro implementazioni di SymmetricAlgorithm.
Data Encryption Standart (DAS)
TripleDES
Rivest Cipher-2 (RC2)
Rijndael (il quale deriva dal nome di Vincent Rijmen e Joan Daeman)
RC2 ha una chiave a lunghezza variabile, DES ha lunghezza di 56-bit mentre TripleDES è fissa di 112bit. L'algoritmo di Rijndael è il...
Similmente alla gerarchia vista con le classi Hash,
Cryptography definisce una classe astratta di nome RandomNumberGenerator, dalla
quale tutte le altre classi random number generator devono derivare.
Attualmente, .NET mette a disposizione una sola implementazione di RandomNumberGenerator :
RNGCryptoServiceProvider.
RandombNumberGenerator
ha solo due metodi che si possono utilizzare per generare valori random: GetBytes() e GetNonZeroBytes().
Entrambe prendono un array di byte come loro unico argomento. GetNonZeroBytes() fa proprio quello che dice il suo nome:
Nessuno degli elementi dell'array conterrà un valore zero (0). Mentre invece,
GetBytes() potrà contenerli.
Il codice che segue mostra il funzionamento di
entrambe i metodi
RandomNumberGenerator rng = new RNGCryptoServiceProvider();byte[] randomData = new byte[100];rng.GetBytes(randomData);byte[] randomDataWithNoZeros = new byte[50];rng.GetNonZeroBytes(randomDataWithNoZeros);
L'oggetto RandomNumberGenerator legge la lunghezza...
Come
la maggior parte delle altre classi, Cryptography
supporta lo streaming. Streaming non è niente altro che un modo per
leggere e scrivere informazioni in modalità sincrona ("Chiama
ed aspetta") o in modalità asincrona ("Spara e
Dimentica"). Come le operazioni criptografiche, sappiamo che il
processo può richiedere, in base alla dimensione del messaggio o della chiave,
diverso tempo. Di conseguenza, la maggior parte delle classi Cryptography mettono a disposizione un modo per avere lo
stream del risultato delle loro operazioni.
La classe CryptoStream deriva dalla classe Stream dello spazio di nomi System.IO, quindi tutti i
metodi previsti da uno stream sono disponibili...
CryptoConfig
Il primo posto dove le classi di criptografia
"guardano" per "nomi" semplici o rilevare i nomi di mappatura è proprio la
classe CryptoConfig. Questa classe espone tre metodi statici, ma quella che
c'interessa a noi in questo momento è l'overload del metodo CreateFromName(). Questo metodo prende un nome
semplice e crea una istanza della classe che è mappata a questo nome.
La mappatura funziona unicamente se l'oggetto che
sta chiamando il metodo Create() è costruito
sulla base dell'algoritmo che vogliamo. Per esempio, se vogliamo eseguire il
seguente codice.
HashAlgorithm hash = SHA384.Create("SHA384");
Visto che la
classe SHA384 è la base di SHA384Managed, la chiamata al metodo
Call()...
Prima d'iniziare è necessario dare uno sguardo veloce allo spazio di nomi System.Security.Cryptography, che da questo punto in poi sarà il nostro punto di rifermento al concetto di Cryptografia.
Come la maggior parte degli spazi di nomi di .NET, ci sono molti membri che necessitano di uno occhiata approfondita, Per esempio questo spazio di nomi ha le sue classi stream (CryptoStream), classi hash astratte (HashAlgorithm), algoritmi simmetrici (RijndaelManaged) ed altro. Queste classi sono state create per rendere facile al programmatore per riferirsi ad un oggetto a runtime con una considerevole flessibilità. Come si può vedere questo design permette di utilizzare contemporaneamente...
Una delle parti essenziali degli
algoritmi di Criptaggio sono le chiavi (proprio come Marcello aveva
affermato in Security 12). Grazie alle chiavi è possibile mettere in sicurezza
interi messaggi, rendendo le operazioni di decrypt (da parte di utenti
maleintenzionati) molto più difficili da eseguire. Le chiavi vengono utilizzate
per alterare i messaggi durante l'interno processo di criptaggio. La figura che
segue ne mostra il funzionamento.
...
Nel campo IT relativo alla Sicurezza spesso si affrontano discorsi composti di termini, non spesso, propriamente conosciuti.
Nel prossimi 3 post passeremo in rassegna i maggiori termini tendando di fornire una descrizione accurata di ogniuno di essi. Per la precisione parleremo di
Plaintext
Ciphertext
Hashes
Keys
Symmetric Algorithms
Asymmetric Algorithms
Comparazione tipi di Chiavi
Generazione di numeri Random
Plaintext - Ciphertext
Plaintext (testo semplice) descrive lo stato di un messaggio che può essere letto facilmente da tutti e tutto. Questo può essere un semplice file di testo fino ad arrivare ad un eseguibile. Per "alterare" una informazione di questo tipo si ha la necessità...
La
definizione di Criptografia è abbastanza diretta e intuibile.
Si definisce Criptografia la scienza di mantenere i
messaggi sicuri. Principalmente è lo studio di algoritmi matematici e
funzioni utilizzate per questo scopo. Esistono due macro tipologie di algoritmi
:
Limitati
Aperti
Algoritmi Limitati
Questi algoritmi sono creati da persone od
organizzazioni e non sono disponibili al pubblico generale. Per esempio, un
algoritmo limitato può essere utilizzato per nascondere il codice di un oggetto
.NET compilato del quale non si vuole fornire la minima possibile di visibilità
del codice.
Algoritmi Aperti
Nascono con l'intenzione di rendere pubblica
una tecnologia da condividere con il mondo....
Negli scenari in cui si presenta la necessità di linkare dati, presenti all'interno di un database, e la nostra applicazione dobbiamo sempre poter garantire due fattori importantissimi.
Confidenza dei messaggiI dati devono essere codificati e dobbiamo garantire che resteranno privati durante il viaggio.
Integrità del messaggioI dati devono essere firmati per assicurarci che siano rimasti inalterati. Esistono due categorie di scenari principali in cui questo dovrebbe essere applicato.
Full SecurityIn questo scenario TUTTI i dati trasmessi devono essere messi al sicuro.Es: Internet Home Banking, in questo caso tutte le informazioni devono essere messe al sicuro.Selected SecuritySolo una selezionata parte dei dati viene messa...
Questo post discute e propone le metodologie da
utilizzare quando s'intende utilizzare Microsoft SQL Server come Database e
Windows Authentication come metodo di autentificazione.
Windows Authentication
Windows authentication è decisamente la più sicura metodologia da applicare
quando ci si connette a Microsoft SQL Server per i seguenti motivi:
1) Al programmatore non è riservata alcuna operazione di
managing relative alle credenziali e sopratutto queste
non sono trasmesse in rete.
2) Le credenziali (username e password) non sono inglobate
nelle connection strings.
3) Avvalendosi di sistemi di password expiration periods, lunghezza minima ed
account lock successivo a multiple richieste invalide, Logon
Security fornisce un buon punto di partenza.
E'...
In
questo post si parlerà di tecniche atte a mettere in sicurezza i vari tipi di
stati che una normale web application può trovarsi a gestire.
Securing ViewState
Se la nostra Web Application utilizza il viewstate
è bene considerare di:Assicurarsi dell'integrità del messaggio, per far questo
è bene abilitare il direttiva enableViewStateMac a
true.<% @ Page enableViewStateMac=true > Questo comporta la generazione di un Message Authentication Code
(MAC) da parte di ASP.NET, durante l'evento
postback.
Configurare l'attributo
validation presente nel machine.config , per specificare il tipo di criptaggio
che sarà utilizzato per la validazione dei dati. (SHA1- 3DES per esempio).
Ricordiamo che SHA1 (Secure Hash Algorithm 1)...
I
vari settings di configurazione sono su base
gerarchica.Web.config posizionati in cartelle specifiche
possono eseguire overide del
Web.Config posizionato nella cartella principale del Virtual
Server. Allo stesso modo, quest’ultimi, possono eseguire overide del
Machine.Config del server Web.
E’
sicuramente utile sapere che è possibile bloccare i sistemi
di overide dei livelli più bassi utilizzando l’elemento
element in coppia con l’attributo
allowOveride.<location path="somepath" allowOverride="false" /> . . . arbitrary configuration settings . . .</location>
E’ da tener nota che la path per cui
si vuole agire può essere settata per il WebSite, la Directory Virutale, la
directory root o la sottodirectory. Quindi : Settando allowOverride a false, si...
Le
web application, per come le conosciamo, spesso necessitano di nascondere alcuni
dati che possono essere classificati come segreti.
Nel caso in cui essi esistano, è necessario
metterli in sicurezza da (li lascio in inglese perchè fa + figo) :
rogue administrators
web malicious users
Le Spie. I Rogue
AdministratorsQuesti ed altri utenti privi di
scrupoli possono avere la possibilità di leggere segreti.Per esempio, un
amministratore WebServer non
dovrebbe essere in grado di leggere le
credenziali di accesso al Server SQL della rete
aziendale.
Le mura sono
cadute ma posso difendermi ancora.Immaginando FileAuthorizaionModule come una reale
protezione alle problematiche relative all'accesso...
L'elemento identity nel web.config supporta due attributi opzionali:
username
password
Questi, permettono di specificare le fixed identity da impersonificare nell'applicazione web che abbiamo sviluppato.
userName="registry:HKLM\SOFTWARE\YourSecureApp\ identity\ASPNET_SETREG,userName" password="registry:HKLM\SOFTWARE\YourSecureApp\ identity\ASPNET_SETREG,password"
Il codice sopra riportato mostra come utilizzare delle credenziali archiviate nel registro. Questa operazione è stata resa possibile dall'impiego del tool aspnet_setreg.exe. Il quale può essere scaricato da questo Url .Cosa è aspnet_setreg.exeaspnet_setreg è una utility che può essere utilizzata per codificare ed archiviare questi attributi nel registro di sistema sotto una chiave sicura.Prima di partire è necessario utilizzare la funzione CryptProtectData con la flag CRYPTPROTECT_LOCAL_MACHINE, la quale di fatto codifica le credenziali inserite. Questo passo va effettuato perchè qualunque persona...
[INTRO]Ricordiamo che per impersonificare l'utente chiamate della risorsa attraverso la Windows Authentication è necessario il codice che segue nel Web.config o nel Machine.config
< SPAN><><authentication mode="="Windows" />< SPAN>< identity impersonate="true" />
[/INTRO]Quando viene messa in gioco l'autenticazione Windows in accoppiata con Impersonation le seguenti opzioni di sicurezza sono disponibili.Windows ACLsL'utente ha richiesto una risorsa. ASP.NET FileAuthorizaionModule esegue un access check per la tipologia di file richiesto il quale deve essere mappato nella ISAPI ASP.NET. Per fare questo utilizza l'access token dell'utente che ha effettuato la richiesta.Per i file che non sono mappati nella ISAPI, IIS esegue un access check, sempre utilizzando l'access token dell'utente...
Ideare e
realizzare strategie di autorizzazione per applicazioni web distribuite è
una delle task più impegnative che si possono presentare in fase di
analisi.Come parte una analisi ?Ponendosi domande
intelligenti.Che cosa s'intende per domande intelligenti?In
un ambiente Enterprise "ideale" le domande da proporsti potrebbero essere
le seguenti:
Dove dovrei utilizzare sistemi di autorizzazione
e con quale meccanismo?
Che meccanismo di autentificazione dovrei
utilizzare?
Dovrei utilizzare Active Directory Service per
l'autorizzazione o dovrei utilizzare un sistema di verifica basata su fonte
dati (DB)?
...
Nel
post precedente abbiamo parlato di Granularità dove abbiamo introdotto i gate
che ASP.NET mette a disposizione.Le modalità di autorizzazione di
ASP.NET vengono definite "Opzioni di Accesso" e possono
essere utilizzate da Web Applications,WebServices e Componenti Remoti. Le
opzioni disponibili sono:URL Authorization . Questo
meccanismo di autorizzazione può essere impostato nei file di configurazione
dell'applicazione (webconfig) e della macchina (machineconfig). L'Opzione URL
permette di ristringere l'accesso a specifici files e cartelle grazie
all'utilizzo del namespace URI (Uniform Resource Identifier). Sarà così
possibile permettere l'accesso a cartelle o files (percorsi web) a determinati
utenti (regole di eccezione). I filtri di accesso possono...
S'identifichi GateKeeper come la tecnologia responsabile di un Gate. Un Gate rappressenta un ACP (Access Control Point) per l'applicazione. Tutte le tecnologie Core
IIS
ASP.NET
Web Services
Remoting
Enterprise Services
Sql Server 2000
Windows 2000
presentano dei GateKeepers. Le richieste devono obbligatoriamente passare per una serie di Gates prima di passare a stato Allowed e quindi venire processate dal sistema. In questo post verranno illustrate la serie di cancelli che vengono attraversati per ogni tecnologia core.Internet Information Services mette a disposizione un Gate quando si autentifica l'utente (è dato per scontato che Anonymous authentication venga disabilitata). IIS Web Permissions può essere utilizzata...
Da alcuni mesi ho deciso di approfondire l'aspetto sicurezza nel mondo dello sviluppo di applicazioni .NET. La categoria Security sarà da considerarsi come il mio diario di viaggio verso questo mondo che, per mancanza di tempo, mi sono deciso solo ora ad affrontare.
La prima pagina (come d'obbligo) inizia con alcuni fondamenti relativi alla sicurezza. Niente di pratico.. solo raccomandazioni.
Utilizzare account con permessi LimitatiProcessi che eseguono script o eseguono cidice dovrebbero girare sotto account (least) per limitare potenziali danni che possono essere eseguiti se il codice è corrotto. L'account ASPNET viene considerato un modello di (least account).Questa decisione è stata presa dal team...