Importante: ASP.NET Security Vulnerability

by Andrea 20 September 2010 01:58

E' stata riscontrata una vulnerabilità in ASP.NET che, se utilizzata, riuscirebbe a far scaricare qualsiasi file presente nell'applicazione, compreso il Web.config, e quindi permetterebbe ad un malintenzionato di venire in possesso di informazioni sensibili.

La vulnerabilità è stata riscontrata anche da Microsoft il 17 settembre 2010, che è già al lavoro per una possibile patch. Microsoft Security Advisory (2416728)

Al momento, è possibile applicare un workaround per tamponare il problema, in attesa della patch.
Le modifiche da eseguire, e maggiori informazioni a riguardo, le potete trovate nel post
"Important: ASP.NET Security Vulnerability", presente nel blog di Scott Guthrie.

Il workaround consiste nell'abilitare la sezione customErrors nel web.config e far puntare ogni errore che avvenga ad una specifica pagina (di errore) all'interno dell'applicazione.
E' importante che gli errori puntino alla stessa pagina di errore, e che quindi venga ritornato sempre lo stesso contenuto e lo stesso codice di errore per ogni errore che avvenga.

E' importante che vengano applicate le modifiche.

Tags: ,

ASP .NET | .NET | Microsoft

Lazy load delle immagini

by Andrea 16 September 2010 05:01

Per velocizzare il caricamente delle pagine del mio blog, ho modificato il template aggiungendo la funzionalità di Lazy Load delle immagini presenti nei post.

Mi è venuto in aiuto il Lazy Load plugin per jQuery.

Questo plugin permette di far caricare le immagini solamente quando rientrano nella parte renderizzata del browser, evitando quindi di eseguire il download di tutte le immagini al caricamento della pagina. Evitando di scaricare le immagini nn presenti nell'area visibile della pagina, si velocizza (e di molto) il caricamento, in quanto vengono notevolmente ridotti i byte trasmessi.

Le modifiche che ho dovuto fare alla Master-Page del mio tema sono le seguenti:

  • Aggiunta della libreria jQuery dalla CDN di google, e dello script del Lazy Load plugin, e il tutto in versione ridotta:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="/scripts/jQuery/jquery.lazyload.mini.js" type="text/javascript"></script>
 
  • Aggiunta della funzione per attivare il Lazy Load delle sole immagini incluse nei post, agendo sul selettore jQuery, in modo da applicare questo comportamento alle immagini contenute nel div .text:
<script type="text/javascript">
  $(function() {
    $(".text img").lazyload({ 
      placeholder : "images/blank.gif",
      threshold : 200 });
  });
</script> 

Nel mio blog, come placeholder ho fatto uso di una gif trasparente dalle dimensioni di 1px per 1px, in modo da evitare la fastidiosa X rossa durante l'attesa del caricamento dell'immagine.

Tutte le informazioni del plugin le trovate a questo link: Lazy Load Plugin for jQuery

Tags: , ,

ASP .NET | Internet | Sito

Immagine usata nei link condivisi su Facebook

by Andrea 16 September 2010 03:13

Quando su Facebook vengono pubblicati dei link, spesso vengono associati ad un'immagine presente nella pagina.
Nel caso la pubblicazione venga fatta da un'applicazione che fa uso delle API di Facebook, l'immagine viene presa in modo automatico (e spesso sembra senza nessuna regola precisa).

FacebookShare

Utilizzando un tag all'interno dell'header delle pagine, è possibile specificare quale immagine includere nei link pubblicati.
Il link deve essere composto in questo modo:

<link rel="image_src" href="images/thumbnail_image.jpg" />

Queste e altre informazioni a riguardo dei Meta Tags utilizzati da Facebook (per l'azione di Share), li trovate nella documentazione delle API presente a questo link: Facebook Share

Technorati Tags: ,,

Tags:

Internet

Codice e slide della sessione Sfruttare al meglio ASP.NET WebForm ed ASP.NET MVC

by Andrea 15 September 2010 03:30

Ecco disponibili al download, il codice e le slide del XeDotNet community meeting che ho tenuto il 10 settembre 2010 dal titolo "Sfruttare al meglio ASP.NET WebForm ed ASP.NET MVC".

  • Codice: http://blog.dottor.net/files/xedotnet/XeDotNet.Dottor.MVC-WebForm_code.zip
  • Slide: http://blog.dottor.net/files/xedotnet/XeDotNet.Dottor.MVC-WebForm_slide.zip

    Dopo l'introduzione di ASP.NET MVC all'interno del .NET framework, è utile fare un pò di chiarezza, in modo da capire quando sia più efficace l'uso di ASP.NET MVC rispetto ad ASP.NET WebForm, e viceversa.
    In questa sessione andremo in dettaglio sulle potenzialità di entrambe le tecnologie per comprendere a pieno i casi d'utilizzo, ed i vantaggi che si possono ottenere da una corretta scelta.

  • Tags: , , ,

    ASP .NET | .NET | XeDotNet

    Come modificare il tool per compare e merge in Visual Studio

    by Andrea 15 September 2010 02:53

    In questi giorni stò provando alcuni tool per comparazione e merge di file, in cerca di un tool che sia migliore di quello presente in Team Foundation (Visual Studio)...e la ricerca non è affatto semplice.

    Al momento stò provando con KDiff3, un tool gratuito che supporta il confronto a 3 vie.

    Per specificare il tool in Visual Studio, è necessario andare in
    tools -> options -> source control -> visual studio team foundation server -> "configure user tools"
    e specificare il comando di apertura (path dell'eseguibile del tool), se usato per diff o merge, e le estensioni dei file che verranno gestiti dal tool (.* per tutti i file).

    Per un corretto funzionamento/integrazione è necessario configurare correttamente le impostazioni che permetto a Visual Studio di comunicare esattamente i path e i nomi dei file in questione.
    Cercando in rete ho trovato un post che raggruppa queste configurazioni a seconda dei diversi tools: diff/merge configuration in Team Foundation - common Command and Argument values

    Riporto qui (cut & paste) le configurazioni presenti nel post:

    Compare tools:

    Product Command Arguments
    TFS default diffmerge.exe %1 %2 %6 %7 %5 /ignorespace
    WinDiff windiff.exe %1 %2
    DiffDoc
    (for Word files)
    DiffDoc.exe /M%1 /S%2
    WinMerge winmerge.exe /ub /dl %6 /dr %7 %1 %2
    Beyond Compare bc2.exe %1 %2 /title1=%6 /title2=%7
    KDiff3 kdiff3.exe %1 --fname %6 %2 --fname %7
    Araxis compare.exe /wait /2 /title1:%6 /title2:%7 %1 %2
    Compare It! Wincmp3.exe %1 /=%6 %2 /=%7
    SourceGear
    DiffMerge
    DiffMerge.exe /title1=%6 /title2=%7 %1 %2
    Beyond Compare 3 BComp.exe %1 %2 /title1=%6 /title2=%7
    TortoiseMerge TortoiseMerge.exe /base:%1 /mine:%2 /basename:%6 /minename:%7
    Visual SlickEdit win\vsdiff.exe %1 %2

    Merge tools:

    Product Command Arguments
    TFS default diffmerge.exe /merge %1 %2 %3 %4 %6 %7
    KDiff3 kdiff3.exe %3 --fname %8 %2 --fname %7 %1 --fname %6 -o %4
    Visual SourceSafe ssexp.exe /merge %1 %2 %3 %4 %6 %7
    Araxis compare.exe /wait /swap /a3 /3 /title1:%6 /title2:%7 /title3:%8 %1 %2 %3 %4
    Beyond Compare
    (2-way merge)
    bc2.exe %1 %2 /savetarget=%4 /title1=%6 /title2=%7
    WinMerge
    (2-way merge)
    winmerge.exe /ub /dl %6 /dr %7 %1 %2 %4
    Guiffy guiffy.exe -s -h1%6 -h2%7 -hm%9 %1 %2 %3 %4
    Ellie Computing guimerge.exe --mode=merge3 %3 %1 %2 --to=%4 --title0=%8 --title1=%6 --title2=%7 --to-title=%9
    SourceGear
    DiffMerge
    DiffMerge.exe /title1=%6 /title2=%8 /title3=%7 /result=%4 %1 %3 %2
    Beyond Compare 3 BComp.exe %1 %2 %3 %4 /title1=%6 /title2=%7 /title3=%8 /title4=%9
    TortoiseMerge TortoiseMerge.exe

    /base:%3 /mine:%2 /theirs:%1 /basename:%8 /minename:%7 /theirsname:%6 /merged:%4 /mergedname:%9

    Visual SlickEdit win\vsmerge.exe %3 %1 %2 %4

    UPDATE:

    Tags:

    .NET | Microsoft

    XeDotNet Community Meeting - Optimization Track

    by Andrea 10 September 2010 00:29

    Questa sera (10 settembre 2010) si terrà il community meeting Optimization Track. Come speaker ci seremo io e Davide Vernole e tratteremo rispettivamente:

    Sfruttare al meglio ASP.NET WebForm ed ASP.NET MVC
    Andrea Dottor - MVP Visual Developer ASP.NET

    Dopo l'introduzione di ASP.NET MVC all'interno del .NET framework, è utile fare un pò di chiarezza, in modo da capire quando sia più efficace l'uso di ASP.NET MVC rispetto ad ASP.NET WebForm, e viceversa.
    In questa sessione andremo in dettaglio sulle potenzialità di entrambe le tecnologie per comprendere a pieno i casi d'utilizzo, ed i vantaggi che si possono ottenere da una corretta scelta.

    WCF: Make it easy
    Davide Vernole - MVP Visual Studio ALM

    Le nostre architetture basano molte delle loro funzionalità su servizi WCF. La curva di apprendimento di questo tipo di servizi, la loro configurazione e la loro proliferazione sono spesso motivo di preoccupazioni per chi deve gestire progetti di questo tipo. Le domande che spesso ci poniamo sono: è possibile ridurre la curva di apprendimento? Si può semplificare o eliminare la parte di configurazione? Come è possibile usare architetture basate su servizi tenendo sotto controllo il numero dei servizi stessi? Con questa sessione risponderemo a tutte queste domande con una soluzione che introduce modularità ed elevata riutilizzabilità a un servizio WCF. Dimostreremo come sia semplice realizzare un servizio modulare, altamente riutilizzabile in grado di ridurre il numero dei servizi necessari alla nostra architettura  in grado di ridurre la complessità di implementazione di architetture SOA. Se volete toccare con mano una soluzione che funziona già in produzione, non mancate di partecipare a questa sessione.

    Per l'iscrizione: http://www.xedotnet.org/nextmeetings.aspx

    L'obiettivo della mia sessione sarà di chiarire un pò il ruolo di ASP.NET MVC e ASP.NET WebForm, cercando di far capire quando sia più corretto l'utilizzo dell'uno o dell'altro. Ultimamente mi sento spesso chiedere "devo iniziare un nuovo progetto, lo faccio con ASP.NET MVC?", e questa sera proveremo a capire quale sia la risposta corretta a questa domanda.

    Tags: , , , ,

    ASP .NET | XeDotNet

    Aggiungere il pulsante Like di Facebook ai post di BlogEngine

    by Andrea 07 July 2010 06:58

    Nel mio blog ho preferito sostituire il ranking dei post con il pulsante "Like" di Facebook.
    Ho notato che non sono molti i post che hanno ricevuto una votazione, forse perchè il sistema di BlogEngine da 1 a 5 non era molto istintivo/immediato (veniva infatti richiesto all'utente di pensare quale fosse il corretto peso da dare, e forse non tutti ne avevano la voglia o il tempo), e quindi ho deciso di adottare una soluzione ben più istintiva e comoda.
    Sembra una cosa da poco, ma a quanto pare non banale. Ora il metodo è davvero semplice, e consiste nel solo premere il pulsante Like nel caso il contenuto sia piaciuto.

    Per fare questo è necessario modificare il file PostView.ascx contenuto nella cartella del proprio tema, ed iserire il seguente codice dopo il testo del post:

       1: <iframe 
       2:     src="http://www.facebook.com/plugins/like.php?href=<%=Post.PermaLink %>&layout=standard&show_faces=false&width=450px&action=like&font=verdana&colorscheme=light&height=25px" 
       3:     scrolling="no" 
       4:     frameborder="0" 
       5:     allowTransparency="true" 
       6:     style="border:none; overflow:hidden; width:450px; height:25px"></iframe>

    Per chi (come me) volesse non far comparire il ranking di BlogEngine, è sufficiente andare nella pagina dei Settings e togliere il flag dalla voce "Enable post ratings".

    Il risultato finale è quello che vedete ora nel mio blog, e se vi piace, non vi rimane che fare un semplice Like.
    Open-mouthed smile

    Technorati Tags: ,,

    Tags: ,

    Internet | Sito

    Metodologie…queste sconosciute

    by Andrea 14 June 2010 07:45

    Leggo i post di LuKa e rimango sempre affascinato, o forse sconvolto.

    Vedere che esistono aziende dove si riesce a migliorare il modo con qui vengono applicate metodologie, vuol dire al tempo stesso che esistono aziende che le applicano. (estremizzo)
    Lo so bene che ci sono, e non sono poche, ma forse c'è poca pubblicità a riguardo del vantaggio che queste azienda traggono nell'applicarle.

    Lavoro nel mondo dell'IT da diversi anni, e in nessuna azienda (da dipendente) ho mai trovato applicata una metodologia (ne agile, ne con altro nome). In alcune aziende si vive con il bello e cattivo tempo del titolare, in altre sono i commerciali a gestire tutto, in altre invece comandano i clienti.

    C'è sempre stata la voglia di cambiare queste cose, di far capire l'importanza di una metodologia (indipendetemente da quale essa sia), ma si finisce solo con l'avere buone intenzioni e nessun (o scarso) risultato.
    Trovo che l'unica cosa possibile in questi casi, sia l'applicare il più possibile alcune regole di queste metodologie tra i/alcuni membri del team...ma sappiamo bene che questo porta a ben poco.
    E allora che fare? Come comportarsi? (Spero davvero di riuscire a darmi una risposta)

    Gli stessi pensieri gli ho avuti anche venerdì, durante il meeting di XeDotNet tenuto da Davide a riguardo di Scrum, dove  mi sono ritrovato più volte con il pensiero di quanto fosse difficile/impossible portare questa metodologia all'interno dell'azienda nella quale lavoro... educare alcuni clienti, ma sopratutto i capi, non è  proprio così semplice come si crede.

    Fortunatamente vivo una parte della mia vita da libero professionista, il che mi permette di vedere realtà ben differenti, con il grosso vantaggio di poter applicare queste tecniche con i miei clienti, e vederne/capirne i benefici direttamente in prima persona.

    Tags:

    Sfoghi | Pensieri

    ASP.NET 4.0 e cambiamenti nella Code Access Security

    by Andrea 08 June 2010 06:17

    In ASP.NET 4.0 sono stati apportati dei cambiamenti a livello di Code Access Security (CAS ).
    Questi cambiamenti sono necessari ad apportare maggiore sicurezza e controllo nell'esecuzione delle applicazioni. Di default, la configurazione della CAS di ASP.NET 4.0 è più restrittiva rispetto alle versioni precedenti, e questo può essere causa di eccezzioni nel caso applicazioni esistenti (che utilizzano versioni precedenti del framework) vengano pubblicate su hosting con la versione 4.0 del framework.

    Nel mio caso mi sono ritrovato con la seguente eccezzione:

    System.TypeInitializationException:
    The type initializer for 'PingFM.PingFMApi' threw an exception.
    ---> System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
    at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
    at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark) at System.Security.CodeAccessPermission.Demand()
    at System.Reflection.RuntimeAssembly.VerifyCodeBaseDiscovery(String codeBase)
    at System.Reflection.RuntimeAssembly.GetName(Boolean copiedName)
    at System.Reflection.Assembly.GetName()
    at PingFM.PingFMApi..cctor()
    --- End of inner exception stack trace ---
    at BlogEngineToPingFm.Ping(Post item, Uri itemUrl, ExtensionSettings settings)

    Una possibile soluzione è modificare la configurazione dell'applicazione, in modo che la CAS abbia lo stesso comportemento delle precedenti versioni di ASP.NET.
    Per fare ciò, nel file web.config sarà necessario valorizzare l'attributo legacyCasModel a True, presente nell'elemento trust. (Prestate attenzione al livello di trust che andate ad utilizzare)

    <system.web>
        <trust level="Medium" legacyCasModel="true" />
    </system.web>

    Per maggiori informazioni sull'argomento, cosiglio la lettura dei seguenti link:
    Code Access Security in ASP.NET 4 Applications 
    What is New in ASP.NET 4.0 Code Access Security
    Changes to the ASP.NET Code Access Security (CAS) Implementation

    Tags:

    .NET | ASP .NET

    Ciao ciao WebHost4Life…

    by Andrea 08 June 2010 03:39

    E' giunto il momento anche per me di abbandonare WebHost4Life dopo parecchi anni passati con un servizio davvero impeccabile...il 02 giugno 2010 mi è toccata la migrazione definitiva verso la nuova piattaforma di wh4l, e purtroppo non è stata indolore (wh4l #fail):

    • DataBase del blog che risaliva a 20 giorni prima (fortunatamente ho sempre eseguito i backup, viste le problematiche).
    • Impossibilità di eseguire il restore manuale del DataBase.
    • Il sito sviluppato con ASP.NET MVC non funzionante (non hanno riportato alcuni setting di IIS 6, il vecchio team di wh4l aveva apportato le modifiche in 3 ore dall'apertura del ticket).
    • SubDomains gestiti in modo differente dal passato, con possibili problematiche per quanto riguarda il posizionamento nei motori di ricerca.

    Ho provveduto ad aprire le segnalazioni il giorno stesso, e ad oggi nulla di tutto ciò è stato sistemato...e sono trascorsi ben 5 giorni.
    Per quanto riguarda i SubDomains, mi hanno comunicato che ora funzionano in questo modo, e non spetta a loro "risolvere", ma ho tamponato il problema gestendo modificando i loro redirect, in redirect 301, in modo da non compromettere gli url indicizzati...e il tutto tramite ISAPI_rewrite.

    Ed eccomi ora nel nuovo hosting su WinHost sperando vivamente sia la soluzione definitiva.
    Il rapporto qualità prezzo mi pare buono, e il primo impatto è senz'altro positivo...speriamo quindi continui così.
    Una possibile alternativa era quella di prendermi un server virtuale, ma per il momento (e per l'uso che ne faccio) sarebbe stata una scelta troppo costosa.
    Per il momento quindi, sono parcheggiato in questo nuovo hosting, con il vantaggio di pagare mese per mese, con il vantaggio (visto anche il passato con wh4l) di non doverci rimettere economicamente nel caso dovessero capitare problemi. ;-)

    Tags:

    Internet | Sito