Security http://blogs.ugidotnet.org/rgm/category/Security.aspx Security it-IT Gian Maria Ricci Subtext Version 2.6.0.0 Limitare le info che si danno all'utente in caso di errore http://blogs.ugidotnet.org/rgm/archive/2008/08/25/93811.aspx <p>Ho trovato un link: <a title="http://www.stupidcubicle.com/" href="http://www.stupidcubicle.com/">http://www.stupidcubicle.com/</a> dovrebbe contenere materiale per geek :), il problema è che quando ci vado trovo questo</p> <p><a href="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rgm/WindowsLiveWriter/Limitareleinfochesidannoallutenteincasod_D14B/image_2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="392" alt="image" src="http://blogs.ugidotnet.org/images/blogs_ugidotnet_org/rgm/WindowsLiveWriter/Limitareleinfochesidannoallutenteincasod_D14B/image_thumb.png" width="828" border="0" /></a> </p> <p> </p> <p>Ok, è vero che da queste informazioni non si ricava nulla, ma fare vedere gli spezzoni di codice a tutti è un bug di sicurezza. L'utente non sviluppatore dovrebbe vedere una semplice pagina di scuse tipo "Sorry, the application has encountered an error", loggare l'errore tipo con elmah, e non far vedere a nessuno il codice che c'è dietro. A livello di security dare un messaggio di errore cosi dettagliato è una cattiva pratica.</p> <p>alk.</p><img src="http://blogs.ugidotnet.org/rgm/aggbug/93811.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2008/08/25/93811.aspx Mon, 25 Aug 2008 15:57:55 GMT http://blogs.ugidotnet.org/rgm/archive/2008/08/25/93811.aspx#feedback 5 http://blogs.ugidotnet.org/rgm/comments/commentRss/93811.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/93811.aspx Mamma mia quanto odio queste cose http://blogs.ugidotnet.org/rgm/archive/2007/11/27/89969.aspx <p>Debbo usare un programma che gestisce un hardware, il fornitore da un tool ma peccato che dica questo</p> <p><em>We are happy to inform that ***** works normally under Windows Vista, however, the UAC (User Access Control) will need to be disabled. A new version will be released later on, which will work under Windows Vista with UAC enabled.</em></p> <p>Perchè debbono essere felici??? Debbo disabilitare la UAC per poter lavorare con il loro prodotto??? Ma la sicurezza cosa è un opzione?? Sono felici di dirmi che ora posso lavorare con il loro prodotto al costo di un sistema più insicuro..mamma mia.....</p> <p>Alk.</p><img src="http://blogs.ugidotnet.org/rgm/aggbug/89969.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/11/27/89969.aspx Tue, 27 Nov 2007 13:48:07 GMT http://blogs.ugidotnet.org/rgm/archive/2007/11/27/89969.aspx#feedback 2 http://blogs.ugidotnet.org/rgm/comments/commentRss/89969.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/89969.aspx Login sicura http://blogs.ugidotnet.org/rgm/archive/2007/10/27/89238.aspx <p>In un <a href="http://blogs.ugidotnet.org/rgm/archive/2007/10/24/89174.aspx">precedente post</a> ho parlato di come cifrare una stringa in javascript con RSA ora è arrivato il momento di mostrare un utilizzo pratico di questa tecnica. Il controllo login standard di asp.net 2.0 è infatti poco sicuro perché spedisce la password dell'utente in chiaro e quindi dovrebbe essere sempre utilizzato in contesto https. Purtroppo per hosting a "poco prezzo" ma in generale se non si ha a disposizione https, sarebbe comunque doveroso non far girare per la rete le credenziali dell'utente in chiaro. Per fare questo si <a href="http://www.nablasoft.com/alkampfer/itablog/securelogin.zip">procede in questo modo</a>, ecco come si presenta la pagina di login. </p><p><span style="font-family:Consolas"><span style="color:blue"> &lt;</span><span style="color:#a31515">script</span> <span style="color:red">language</span><span style="color:blue">="javascript"</span> <span style="color:red">src</span><span style="color:blue">="RSA/BigInt.js"</span> <span style="color:red">type</span><span style="color:blue">="text/javascript"&gt;&lt;/</span><span style="color:#a31515">script</span><span style="color:blue">&gt;<br /></span>        <span style="color:blue">&lt;</span><span style="color:#a31515">script</span> <span style="color:red">language</span><span style="color:blue">="javascript"</span> <span style="color:red">src</span><span style="color:blue">="RSA/Barrett.js"</span> <span style="color:red">type</span><span style="color:blue">="text/javascript"&gt;&lt;/</span><span style="color:#a31515">script</span><span style="color:blue">&gt;<br /></span>        <span style="color:blue">&lt;</span><span style="color:#a31515">script</span> <span style="color:red">language</span><span style="color:blue">="javascript"</span> <span style="color:red">src</span><span style="color:blue">="RSA/RSA.js"</span> <span style="color:red">type</span><span style="color:blue">="text/javascript"&gt;&lt;/</span><span style="color:#a31515">script</span><span style="color:blue">&gt;<br /><br /></span>        <span style="color:blue">&lt;</span><span style="color:#a31515">script</span> <span style="color:red">language</span><span style="color:blue">="javascript"</span> <span style="color:red">type</span><span style="color:blue">="text/javascript"&gt;<br /></span>            <span style="color:blue">function</span> EncryptPassword() {<br />            <span style="color:green"><br /></span>               <span style="color:blue">var</span> EncExponent = document.getElementById(<span style="color:#a31515">"encryptionExponent"</span>).value;<br />               <span style="color:blue">var</span> DecExponent = <span style="color:#a31515">""</span>;<br />               <span style="color:blue">var</span> EncModulus= document.getElementById(<span style="color:#a31515">"modulus"</span>).value;<br />               setMaxDigits(130);<br />               key = <span style="color:blue">new</span> RSAKeyPair(EncExponent, DecExponent, EncModulus);<br />               <br />                document.getElementById(<span style="color:#a31515">"EncryptedPassword"</span>).value = <br />                    encryptedString(key, document.getElementById(<span style="color:#a31515">"Login1$Password"</span>).value);<br />                document.getElementById(<span style="color:#a31515">"Login1$Password"</span>).value = <span style="color:#a31515">"*********"</span>;<br />            }<br />        <span style="color:blue">&lt;/</span><span style="color:#a31515">script</span><span style="color:blue">&gt;<br />...<br /></span>         <span style="color:blue">&lt;</span><span style="color:#a31515">asp</span><span style="color:blue">:</span><span style="color:#a31515">Login</span> <span style="color:red">ID</span><span style="color:blue">="Login1"</span> <span style="color:red">runat</span><span style="color:blue">="server"</span> <span style="color:red">OnAuthenticate</span><span style="color:blue">="OnLoggingIn"</span> <span style="color:red">OnLoggedIn</span><span style="color:blue">="OnLoggedIn"&gt;<br /></span>         <span style="color:blue">&lt;/</span><span style="color:#a31515">asp</span><span style="color:blue">:</span><span style="color:#a31515">Login</span><span style="color:blue">&gt;<br /></span>         <span style="color:blue">&lt;</span><span style="color:#a31515">asp</span><span style="color:blue">:</span><span style="color:#a31515">HiddenField</span> <span style="color:red">ID</span><span style="color:blue">="encryptionExponent"</span> <span style="color:red">runat</span><span style="color:blue">="server"</span> <span style="color:blue">/&gt;<br /></span>         <span style="color:blue">&lt;</span><span style="color:#a31515">asp</span><span style="color:blue">:</span><span style="color:#a31515">HiddenField</span> <span style="color:red">ID</span><span style="color:blue">="modulus"</span> <span style="color:red">runat</span><span style="color:blue">="server"</span> <span style="color:blue">/&gt;<br /></span>         <span style="color:blue">&lt;</span><span style="color:#a31515">asp</span><span style="color:blue">:</span><span style="color:#a31515">HiddenField</span> <span style="color:red">ID</span><span style="color:blue">="EncryptedPassword"</span> <span style="color:red">runat</span><span style="color:blue">="server"</span> <span style="color:blue">/&gt;<br /> </span></span></p><p>Come si può vedere si importano i file js che implementano l'algoritmo RSA, poi si crea una semplice funzione che genera una nuova chiave crittografica dalla chiave pubblica mantenuta negli hiddenfield <em>encryptionExponent </em>e <em>modulus</em>, con questa chiave pubblica si può cifrare il contenuto della textbox password, e sostituire al suo contenuto una bella serie di asterischi, la password cifrata viene invece messa in un hiddenfield chiamato <em>EncryptedPassword. </em>Il code behind è altrettanto semplice e può essere consultato nell'esempio accluso. Nell'evento load viene generato un nuovo RsaCryptoServiceProvider, esportata la sua parte pubblica, inserita negli appositi ridde field ed infine messo in sessione </p><p><span style="font-family:Consolas"><span style="color:blue">if</span><span style="color:black"> (!IsPostBack) {<br /> <br />   </span><span style="color:#2b91af">RSACryptoServiceProvider</span><span style="color:black"> provider = </span><span style="color:blue">new</span><span style="color:black"> </span><span style="color:#2b91af">RSACryptoServiceProvider</span><span style="color:black">();<br />   </span><span style="color:#2b91af">RSAParameters</span><span style="color:black"> publicKey = provider.ExportParameters(</span><span style="color:blue">true</span><span style="color:black">);<br />   encryptionExponent.Value = </span><span style="color:#2b91af">BitConverter</span><span style="color:black">.ToString(publicKey.Exponent).Replace(</span><span style="color:#a31515">"-"</span><span style="color:black">, </span><span style="color:#a31515">""</span><span style="color:black">);<br />   modulus.Value = </span><span style="color:#2b91af">BitConverter</span><span style="color:black">.ToString(publicKey.Modulus).Replace(</span><span style="color:#a31515">"-"</span><span style="color:black">, </span><span style="color:#a31515">""</span><span style="color:black">);<br />   Session[</span><span style="color:#a31515">"key"</span><span style="color:black">] = provider;<br /> <br />} </span></span></p><p>L'altro evento degno di nota è invece l'<em>OnLoggingIn</em> del controllo login, dove bisogna fare la decrittazione della password e l'autenticazione. </p><p><span style="font-family:Consolas"><span style="color:blue">public</span><span style="color:black"> </span><span style="color:blue">void</span><span style="color:black"> OnLoggingIn(</span><span style="color:#2b91af">Object</span><span style="color:black"> sender, </span><span style="color:#2b91af">AuthenticateEventArgs</span><span style="color:black"> e) {<br />   </span><span style="color:#2b91af">TextBox</span><span style="color:black"> userTextBox = (</span><span style="color:#2b91af">TextBox</span><span style="color:black">) Login1.FindControl(</span><span style="color:#a31515">"UserName"</span><span style="color:black">);<br />   </span><span style="color:#2b91af">String</span><span style="color:black"> password = DecryptPassword();<br />   e.Authenticated = </span><span style="color:#2b91af">Membership</span><span style="color:black">.ValidateUser(userTextBox.Text, password);<br />} </span></span></p><p>Come si può vedere non si fa altro che decrittare e delegare il tutto alla <em>ValidateUser</em> della membership, il gioco è cosi fatto. </p><p>Alk. (<a href="http://www.nablasoft.com/alkampfer/itablog/securelogin.zip">Scarica l'esempio</a>)</p><img src="http://blogs.ugidotnet.org/rgm/aggbug/89238.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/10/27/89238.aspx Sat, 27 Oct 2007 09:43:44 GMT http://blogs.ugidotnet.org/rgm/archive/2007/10/27/89238.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/89238.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/89238.aspx Controllare prima di fare :D http://blogs.ugidotnet.org/rgm/archive/2007/10/24/89174.aspx Se vi interessa cifrare stringhe da Javascript in RSA da passare al codice lato server questo posto potrà esservi utile. <A href="http://blogs.ugidotnet.org/rgm/archive/2007/10/24/89174.aspx">(Clicca per leggere)</A><BR/><BR/> Alk.<img src="http://blogs.ugidotnet.org/rgm/aggbug/89174.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/10/24/89174.aspx Wed, 24 Oct 2007 09:13:10 GMT http://blogs.ugidotnet.org/rgm/archive/2007/10/24/89174.aspx#feedback 3 http://blogs.ugidotnet.org/rgm/comments/commentRss/89174.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/89174.aspx L’avvento http://blogs.ugidotnet.org/rgm/archive/2007/10/18/89025.aspx <p>Il mondo è <a href="http://www.weloveraf.com/Default.aspx">veramente cambiato</a>, egli verrà su un debugger di fuoco e brucerà i bug con i suoi infiniti poteri, nessun buco di sicurezza potrà tollerare il suo sguardo. Egli ha creato il mondo dall'assembly e nel momento del giudizio i giusti cammineranno assieme a lui verso il Codice promesso. </p><p>Alk.</p><img src="http://blogs.ugidotnet.org/rgm/aggbug/89025.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/10/18/89025.aspx Thu, 18 Oct 2007 08:53:15 GMT http://blogs.ugidotnet.org/rgm/archive/2007/10/18/89025.aspx#feedback 2 http://blogs.ugidotnet.org/rgm/comments/commentRss/89025.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/89025.aspx Validare gli input dell’utente seconda parte http://blogs.ugidotnet.org/rgm/archive/2007/10/10/88868.aspx Seconda parte del post su come validare gli input dell'utente. In questa parte si mostra come utilizzare Castle.Winsor per gestire il file di configurazione dove memorizzare le regole di validazione. Alk.<img src="http://blogs.ugidotnet.org/rgm/aggbug/88868.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/10/10/88868.aspx Wed, 10 Oct 2007 15:03:50 GMT http://blogs.ugidotnet.org/rgm/archive/2007/10/10/88868.aspx#feedback 2 http://blogs.ugidotnet.org/rgm/comments/commentRss/88868.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/88868.aspx Validare sempre gli input dell’utente http://blogs.ugidotnet.org/rgm/archive/2007/10/09/88830.aspx In questi giorni mi sto dilettando un po di sicurezza, ieri ho postato un tip su come cifrare la querystring, oggi volevo postare una semplice tecnica per fare validazione custom dei parametri in querystring e post. La tecnica non è nulla di eccezionale, ma può essere interessante. (clicca per leggere) Alk.<img src="http://blogs.ugidotnet.org/rgm/aggbug/88830.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/10/09/88830.aspx Tue, 09 Oct 2007 09:55:44 GMT http://blogs.ugidotnet.org/rgm/archive/2007/10/09/88830.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/88830.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/88830.aspx