Domanda

Sto cercando di aggiornare la libreria di database che usiamo al lavoro per utilizzare query con parametri in modo che i colleghi che non sono molto ben informato SQL injection non dovranno ricordarsi di fuggire input e basta passare in una serie di parametri, invece (sto usando pg_query_params ).

Comunque, io sono in esecuzione in un problema. Uno dei requisiti della libreria di database è che si registra ogni query che viene eseguito e non riesco a capire un modo per ottenere il testo di una query con parametri una volta che i parametri sono stati compilati. C'è un modo per fare questo ( a parte rotazione mia funzione per la query con parametri, immagino)?

In altre parole, quando si esegue una query con parametri come

pg_query_params('SELECT id FROM table WHERE foo = $1', array('bar'));

voglio ottenere qualcosa di simile

SELECT id FROM table WHERE foo = 'bar'
È stato utile?

Soluzione

PostgreSQL protocollo esteso (che è usato da pg_query_params) separa parametri da query.

Le query sono in ultima analisi costruiti solo sul lato server, non c'è modo di costruire loro sul lato client utilizzando le capacità unica di PostgreSQL.

È possibile sostituire i valori dei parametri forniti e registrare la query prima di inviare i params utilizzando preg_replace.

Aggiornamento:

È possibile attivare PostgreSQL accedendo che sarà registrare le query in un file o syslog (inclusi i parametri legati) sul lato server, poi periodicamente caricare questo file in una tabella PostgreSQL.

Altri suggerimenti

A meno che non si può sostituire ogni occorrenza di pg_query_params () nel codice sorgente con il proprio funzione wrapper (se è possibile, allora si potrebbe desiderare di utilizzare la funzionalità di auto prepend in PHP per includere la dichiarazione di wrapper) allora si può veramente solo fare questo a livello di database.

C.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top