Categorie
fatti ... e pugnette

Mi hanno craccato le stastistiche del blog

Questa notte qualche “simpatico personaggio ( 👿 )”, ha deciso che doveva farmi vedere quanto fosse bravo a fare l’ hacker il cracker.

La sua attenzione è stata focalizzata sul database delle statistiche di PHPstatsche non so se grazie ad un Exploit o ad un attacco brute force ha ceduto miseramente. ( 😥 )

Questo è quello che mi sono trovato difronte questa mattina:

PHP-Stats - Calendario accessi svuotato
(clicca per ingrandire)

Dopo un attimo di sconforto, ho pensato ai backup … ” 😀 Ok, nessun problema, li faccio tutte le notti …”

Con un operazione durata circa 20 minuti, mi collego al server di backup, li scarico in locale, fermo il demone di mysql, li ripristino e rifaccio partire mysql ….

Bene, tutto a posto mi dico, ma quando mi ricollego mi rendo conto che il problema è rimasto e realizzo che non so fare i backup. 🙁

O meglio, il backup c’è ma viene sovrascritto ogni notte, ed in questo caso, il simpatico personaggio aveva smanettato prima dell’ora x.

Il risultato è che ho perso le statistiche ma dato che è inutile “piangere sul latte versato” vediamo i lati positivi:

  • E’ successo a me e non ad un cliente
  • Si tratta delle statistiche di un blog … (quindi niente di vitale)
  • Ho migliorato la procedura di backup
    ( gestione settimanale, ed invio dump mysql via mail )
  • Mi sono reso conto che phpstats è bacato
    ( sarà il caso di cambiarlo ???? )

Se poi vogliamo dirla tutta, per vari motivi, nel corso del tempo ho implementato statistiche anche con Analitycs , Reinvigorate e 103bees quindi il danno è relativamente marginale.

Certo, mi spiace in quanto con phpstats avevo dati da oltre un anno, ad era bello vedere l’andamento degli accessi sempre in crescita, ma questa è la giusta punizione a chi non fa i backup (almeno questo è quello che dico sempre ai miei clienti)

Penso che con l’occasione passerò a mint; è già da un po’ che ci penso ma per vari motivi o sempre rimandato.

[tags]phpstats, backup[/tags]

Categorie
sviluppo

MySQLDriverCS e System.Byte[]

Oggi ho scoperto che usando questi driver per la connessione ad un database MySQL all’interno di una pagina .aspx, nel caso di una SELECT su campo di tipo Text , TintText , MediumText o LongText invece di restituire una stringa restituiscono un insieme di byte.

Se si utilizza un DataReader è possibile convertire in stringa utilizzando il metodo GetString ( credo messo a disposizione proprio per questo) , che però accetta come argomento solo l’indice del campo.
Nel caso volessimo utilizzare il nome del campo possiamo ricorrere ad un altro metodo GetOrdinal, che ci restituisce un integer con l’indice della posizione del campo. ( fonte )

DataReader.GetString(DataReader.GetOrdinal(“NomeCampo”))

Inizialmente l’ho interpretato come un errore del driver ma in realtà ho imparato che MySQL internamente tratta questi campi come array di byte, e quindi, anche se non condivido la scelta dello sviluppatore, si è scelto di restituire lo stesso tipo.

I problemi si complicano se voglio lavorare con un DataTable preparato da un DataAdapter, infatti, anche se internamente viene usato un DataReader, le righe non vengono generate correttamente.

Dopo diverse ricerche, numerosi tentativi falliti e dopo qualche capocciata, ho deciso di aggirare il problema cambiando semplicemente i driver usati per la connessione e passando quindi all’utilizzo dei Connector/Net sviluppati direttamente da MySQL AB.

Fortunatamente le modifiche sono state minime essendo i nomi dei metodi praticamente identici.
In pratica ho sostituito le chiamate a MySQLDriverCS trasformandole in MySql.Data.MySqlClient ed ho cambiato il formato della stringa per la connessione.

Categorie
sviluppo

Ordinare i risultati di una query per rilevanza

Per un lavoro che sto seguendo mi è stato chiesto di preparare un motore di ricerca dove i risultati della query devono essere ordinati in base alla rilevanza che questi hanno con le parole cercate.

il problema è che la rilevanza dei singoli record varia a seconda del campo nel quale vengono trovate e dal numero di parole cercate.

immagine una tabella con la seguente struttura:

  • id
  • titolo
  • descrizione
  • keywords
  • il motore di ricerca deve cercare all’interno dei campi titolo, descrizione e keywords con il criterio “like ‘%parola%’ ” ma deve visualizzare prima i risultati dove il match è positivo per titolo , poi per keywords ed infine per descrizione.

    il discorso di complica se le parole cercate sono più di una in quanto la rilavenza di un match completo su tutte le parola vale di più di uno parziale.

    quello che segue è la mia soluzione al problema …

    Categorie
    sviluppo

    SQL – Injection

    link di riverimento: http://www.creativeweb.it

    Per Sql-Injection si intendono comunemente tutti quegli attacchi ad un’applicazione, solitamente Web, in cui il programma esegue query su di un database SQL utilizzando variabili passate dall’utente senza averle precedentemente verificate. …

    ho trovato il link due giorni fa su ziobudda.net ma solo oggi ho avuto il tempo di darci un’occhiata.

    L’articlo fa una trattazione usando l’accoppiata php e mysql ma penso che i concetti siano applicabili ache ad altri contesti ( per es. asp e access ).

    Per chi non volesse leggerlo in formato pdf questo è il link