Non è esattamente uno Issue.... però per me si!

Mi è arrivato il portatile nuovo... un XPS M1330 supercarrozzato che userò per gli spostamenti e/o tutte le occasioni in cui non posso e non voglio portarmi dietro il mio "mulo" (inteso come 17 pollici da 5kg, non come noto programma di file sharing :P).

Ieri contento come una pasqua ho aperto la confezione e questo è quello che mi sono trovato davanti

Tanto, chi voleva fare le virgolette?? :P

(Comunque la Dell si è offerta di rispedirmelo intero per venerdi. Io purtroppo non ci sono, ho rimandato a Lunedi. L'assistenza, per fortuna, sembra funzionare anche in casi sfigati come questo!)

Questo periodo è a dir poco frenetico, tanti progetti che devono essere chiusi prima dell'estate, clienti ansiosni per il caldo, PC che rallentano, progetti personali che slittano, email che si affollano senza risposta.... malgrado questo, ho avuto pochi minuti fa la gioia di vedermi riconfermato l'MVP Award! Che dire, un grazie sincero ad Ale (si si, me la ricordo la survey :P), a Microsoft che continua a credere in me, ed a tutti i miei compagni MVP!  :)

Mi ricollego a questo post di Massimiliano riguardo gli ultimi attacchi di Sql Injection che stanno subendo un pò tutti.

Ricercando su goggle per 'www.bigadnet.com', vedrete subito una quantità di siti impressionante, tutti purtroppo sviluppati con il vecchio ASP 3.0. Molti, sempre purtroppo, riguardano siti istituzionali che fortunatamente sono stati già messi a posto, per ora. Se si conta che bigadnet è solo uno dei domini che si occupano di mandare in giro certe schifezze... a questo indirizzo trovate una lista aggiornata di altri domini.

Il meccanismo di injection è piuttosto semplice anche se raffinato: si concentrano sugli id numerici, quindi tutte le funzioni di controllo che siamo abituati ad avere sul vecchio ASP, se ne vanno a donne di facili costumi. Anche qualsiasi tag stripping, ovviamente, non funziona, visto che la stringa è encodata come ha dimostrato Massimiliano. Inoltre, l'attacco si scatena sulle querystring, che molti sviluppatori (sigh) sono abituati a considerare "sicure" (eh, tanto chi mai si metterà a giocare con le querystring?? eh? eh... :P).

Praticamente, al web server arriva una richiesta di questo genere:

pagina.asp?IdNumerico=888;DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST([..CUT della mappazza])--

Come ho detto prima, ne controllo apici ne tag stripping ci mettono a posto, quindi tutta la mappazza arriva bella diretta sul nostro db.
Gli attacchi sono di due tipi, uno che come ha mostrato massimiliano si "limita" a cambiare tutti i campi di un certo tipo aggiungendo la famosa stringa, e l'altro che oltre a questo crea un paio di tabelle temporanee e fa il dump del filesystem del SQL su tabella, che poi restituisce in output.

Il secondo problema si può facilmente risolvere configurando in maniera coerente gli accessi al database (niente sa, niente dbowner, niente di niente :D).
Per il primo problema, invece, l'unica soluzione reale è utilizzare stored procedures con parameters: una soluzione che nel 1999/2000 utilizzavano in due e che ora è un must-have.
Purtroppo riscrivere un intero sito utilizzando stored procedures può non essere semplicissimo, soprattutto in caso di ecommerce o applicativi complessi.
In questi casi una soluzione possibile è controllare ogni imput utilizzando regular expression (tipo regEx.Pattern = "[^0-9a-zA-Z]" per filtrare qualsiasi cosa non sia un numero o una lettera) o una lista di "bad words", inserendo per esempio "CAST", "VARCHAR", etc. Purtroppo, si corre il rischio di filtrare anche contenuti corretti, soprattutto in caso di CMS... li bisogna controllare di volta in volta il singolo caso, rimboccarsi le maniche e... convincere il cliente a migrare il sito del 1999 in ASP.NET!!!!! :D

P.S.: Si, ho scritto tutto questo perchè il piu vecchio applicativo residente sui miei server è stato ovviamente attaccato! Se qualcuno avesse dei problemi a ripulire il DB, mi sono fatto una consolle application che con sprezzo di select si occupa di girarsi tutti i campi e rimettere a posto le cose. Se a qualcuno serve, mi contatti: ovviamente non mi prendo responsabilità :P

In questi giorni tanti cari a noi liberi professionisti, quando si avvicina il giorno in cui tutti i nostri sudati guadagni custoditi gelosamente per un anno vengono giustamente restituisti allo stato (tono sarcastico smorzato), può succedere di ricevere delle strane email della suddetta Dott.ssa Rocchi che, soffiando sulle fiamme, ci avvisa in perfetto burocratese incomprensibile che qualcosa non è stato pagato e che rischiamo una sanzione.

Io in questi giorni sono stressato e impegnato fino all'inverosimile, e per 4 nanosecondi ho pensato a qualche nuova imprecazione da lanciare pensando "e ora che cosa mi sono dimenticato di pagare??"... poi 1 ulteriore nanosecondo dopo ho pensato che non esiste che lo stato mi avvisi tramite email di un mancato pagamento, e oltretututto che questa fantomatica notizia mi è arrivata sulla meno ufficiale delle mie 5 caselle di posta, quella in cui ho le iscrizioni alle mailing list! Facendo due piu due, apro il file .zip allegato giusto per provare OneCare, che giustamente blippa e mi segnala uno splendido Downloader...

Questo giusto per dire che magari persone piu distratte e piu incasinate di me potrebbero cliccare e pensare solo dopo ad un eventuale incongruenza ... nel caso, magari, se vi arriva, vi ricorderete di questo post e ci penserete due volte! :)

I dettagli del virus li trovate qui.

posted @ sabato 7 giugno 2008 19.25 | Feedback (0) | Filed Under [ Off Topic ]

Sono un paio di giorni che sto "impazzendo" con la scarsa maneggevolezza dei setup project.

Odio fare progetti di setup generalmente e quando li faccio sono sempre molto semplici.
Se devo andare un tantino oltre, mi scontro sempre con le evidenti limitazioni di "semplicità" del setup project di Visual Studio.

Stendendo un velo pietoso sui maneggi per cercare di dare un aspetto grafico alla cosa, dopo aver semplicemente cambiato la banner image, mi sono scontrato col fatto che il titolo dato di default ai vari tipi di form faceva a pugni con l'immagine messa come banner...

La soluzione piu ovvia è levare la scritta... peccato che in User Interface Design non ci sia una proprietà che permette di farlo.... stupito e scioccato da una cosa così strana, imboccato da un consiglio di Corrado ("perchè non provi ad usare Orca?" che per chi non lo sapesse è un msi editor), mi sono messo a "ravanare" nell'MSI finchè alla voce Control non ho trovato, ordinando per "type" tutta la serie di "BannerText". E' bastato brasare tutti per ottenere il risultato atteso... certo, se dovessi ricompilare dovrei rifare tutto...

E mi sorge la domanda.. ma era veramente così complesso esporre la proprietà come pubblica? :D

Mi ha anticipato di poco Corrado...

Ma lo ripeto, casomai non si fosse capito: ma quanto bello è??

Unica pecca la mancanza di SD, ma con 4gb anche mettendone due di mappe, ci si dovrebbe stare....

Vedremo quando riuscirò a "toccarlo con mano" :)

Mi è capitato in un paio di progettini Ajax con cui stavo "giocando" (cambiate "giocando" con "pubblicando in produzione" ed avrete un'idea un tantino piu precisa :P) di avere ogni tanto il suddetto errore quando invocavo Page Methods o Web Services dal mio codice Ajax.

Dopo una prima fase di nervosismo (visto che di questi giorni è il periodo degli errori che capitano "ogni tanto".... magari in futuro ne scriverò altri :) ) ho controllato un pò i dati che passavano e mi sono accorto che ad un certo momento, per determinati criteri di ricerca, venivano passati piu di 2 mega di dati tra lo strato server e lo strato Javascript...

E' bastato quindi andare nel web.config e cambiare la maxJsonLength che, di default, è impostata su 2MB e portarla a 4... per un pò dovrei essere a posto :)

<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization maxJsonLength="4194304"/>
        <webServices>
    <scripting>
<system.web.extensions>

Sono entrato da pochissimo nella Tech Preview di Live Mesh (grazie Stephan e Eric :) ).
Devo dire che le prime impressioni, dopo una giornata di lavoro e smandruppamenti vari, sono talmente positive che da oggi all'una ho spostato alcuni dei progetti minori su cui sto lavorando su Live Mesh e sto facendo le prove di sviluppo.

La sincronizzazione con il server è velocissima e non rallenta il sistema, veramente un ottimo lavoro per ora ... :)

Unico problema, il client Live Mesh (per tenere sincronizzato il Desktop Online con i propri computer) è attualmente installabile solo sulla versione Inglese di Windows Vista. Ho trovato questo post che spiega come eseguire l'installazione anche sulle versioni diverse, ma purtroppo dopo l'installazione l'applicativo desktop riportava un errore non meglio definito.

Ho trovato dopo prove varie che, solo per l'installazione ed il login, sul mio sistema è stato anche necessario portare i locale (data, ora e currency) in inglese. Così ho potuto fare il login e, una volta partito, funziona anche rimettendo i settings in italiano.

P.S.: eh si... lavoro pure di domenica... eh no, non ho fatto il ponte :P

posted @ domenica 4 maggio 2008 18.04 | Feedback (7) | Filed Under [ Off Topic ]