Giu 26 2009

How to installazione mssql su Zend Server CE su linux con freetds

Di seguito alcuni semplici passaggi per installare su Zend Server CE installato su linux l’estensione mssql, freetds, per poter utilizzare un server MSSQL da php su macchina Linux.

Per prima cosa, installiamo freetds:
yum install freetds

Dopo procediamo a installare l’estensione mssql di ZS che non è fornita di default:
yum install php-mssql-zend-ce

L’estensione sarà attivata da sola. Meglio comunque riavviare lo zend server.

Andare all’interno di /etc/freetds.conf

Mettere:
# Myserver
[mysqlserver]
host = 192.168.X.X
port = 1433
tds version = 8.0

A questo punto per connettersi da php utilizzare:

mssql_connect(”192.168.X.X”, “login”, “pwd”) or die (”Failed”);

E il gioco è fatto.

No responses yet

Mar 26 2009

Transazioni con Zend Framework

Recentemente avendo sviluppato nelle ore serali un progetto web ( www.animalhelp-spb.com ) per supportare e cercare di far trovare casa a cani e gatti randagi russi, ho deciso di realizzarlo iniziando a farmi le ossa con Zend Framework.

Premetto che devo ancora dettagliare ed approfondire la conoscenza di questo strumento, in particolare nell’utilizzo secondo la logica MVC (model - viewer - controller), però l’ho trovato molto interessante, in particolare per la gestione delle transazioni.

In sostanza prima di tutto istanzio la classe corretta parametrizzando gli accessi al database:

$dbparams = array(’host’ => DB_HOST, ‘username’ => DB_USER, ‘password’ => DB_PWD, ‘dbname’ => DB_NAME);
$db = new Zend_Db_Adapter_Mysqli($dbparams);
$db->setFetchMode(Zend_Db::FETCH_OBJ);

Successivamente apro la transazione:

$db->beginTransaction();
try
{
…. query 1 ….
…. query 2 ….

$db->commit();
}
catch (Exception $e)
{
$db->rollBack();
….
}

In sostanza nel caso vi sia un errore all’interno della transazione viene automaticamente rollbackato secondo una modalità simile a quella usata da adodb “Smart Transaction”.

No responses yet

Mar 22 2009

Apache mod rewrite cheat sheet

Segnalo un ottimo articolo su mod rewrite di Apache:

http://www.addedbytes.com/apache/mod_rewrite-cheat-sheet/

No responses yet

Gen 23 2009

EZPA password recovery

Piccolo e rapido howto per fare recovery di password di EZPA nel caso si perdano per qualche motivo gli accessi.

Entrare nella console di mysql, selezionare il DB di EZPA.
Successivamente eseguire:

SELECT * FROM ezusers;

Prendere una login qualunque ad alti privilegi ed eseguire la query:

update ezuser set login = ‘mialogin’, password_hash_type = 4, password_hash = PASSWORD(’nuovapwd’) WHERE contentobject_id = $id;

In pratica l’hash type 4 per EZPA è quello relativo alla codifica delle password standard di mysql e nella query di login viene inserito come alternativa nel caso non ci sia match con il password hash type configurato e quello a livello utente e password.

Una volta entrati si sistemano eventuali altri utenti fuori uso…

No responses yet

Dic 29 2008

Potenziale SQL Injection con AdoDB e driver mysqli

[SEGNALO CHE HO SCOPERTO QUESTA COSA DA POCO E LIMITANDOMI AD ALCUNI TEST E PROVE VELOCI MA REALI, PERCUI OGNI EVENTUALE APPROFONDIMENTO/SMENTITA ETC... E' BEN ACCETTO]

Segnalo una problematica di sicurezza abbastanza importante per coloro che utilizzano adodb utilizzando il driver mysqli (le nuove funzioni di connessione con mysql native in php 5).

In sostanza le nuove funzioni mysqli consentono mediante la seguente funzione: mysqli_multi_query di poter eseguire più statement SQL in mysql come ad esempio:

SELECT * FROM TBL1 WHERE id = 1; DROP table TBL2;

Questa query utilizzando le vecchie librerie mysql (es. mysql_connect) dava errore.
La possibilità di eseguire più query SQL è supportata su mysql 5.0.x anche da command line, non saprei se anche vecchie versioni lo consentivano.

Questo significa che se per esempio utilizziamo in php una query del tipo:

$sql = “SELECT * FROM tbl1 WHERE id = $_GET['id']“; // (Premesso che venga come minimo fatto l’escape dei caratteri come ‘ o “)

Possiamo rischiare che qualche burlone passi in GET il seguente valore:
“1; DROP TABLE tbl2;”
Il che comporterebbe che l’SQL eseguito sia:

SELECT * FROM TBL1; DROP table TBL2;

Di fatto quindi con AdoDB con driver mysqli, la seconda query viene effettivamente eseguita.

Diventa quindi essenziale fare un controllo sull’input dell’utente per $_GET['id']. Ad esempio verificando che sia un numero intero.

La soluzione più rapida è quella di cambiare la connect di AdoDB dicendogli di usare il driver mysql anziché mysqli, la soluzione migliore e da fare comunque resta in ogni caso il filtraggio di tutti i dati in input.

2 responses so far

Next »