Frage

Ich versuche, die Datenbank-Bibliothek zu aktualisieren, dass wir bei der Arbeit verwenden parametrisierte Abfragen zu verwenden, so dass die Mitarbeiter, die über SQL-Injection nicht sehr gut informiert sind, werden nicht eingegeben entweichen dürfen nicht vergessen, auf und übergeben Sie einfach in einer Reihe von Parametern statt (ich verwende pg_query_params ).

Allerdings Ich laufe in ein Problem. Eine der Anforderungen der Datenbankbibliothek ist, dass es jede Abfrage protokolliert, die ausgeführt wird, und ich kann nicht einen Weg finden, um den Text einer parametrisierte Abfrage zu erhalten, sobald die Parameter in das Ausfüllen. Gibt es eine Möglichkeit, dies zu tun ( abgesehen von meiner eigenen Funktion für parametrisierte Abfragen rollen, denke ich)?

Mit anderen Worten, wenn eine parametrisierte Abfrage wie Ausführen

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

Ich mag wie etwas bekommen

SELECT id FROM table WHERE foo = 'bar'
War es hilfreich?

Lösung

PostgreSQL erweiterte Protokoll (die von pg_query_params verwendet wird) trennt Parameter von Abfragen.

Die Abfragen nur auf der Serverseite letztlich aufgebaut sind, gibt es keine Möglichkeit, sie auf der Client-Seite zu konstruieren, nur PostgreSQL Fähigkeiten verwenden.

Sie können die Werte der Parameter zur Verfügung gestellt ersetzen und die Abfrage anmelden, bevor die params Senden preg_replace verwendet wird.

Update:

können Sie aktivieren PostgreSQL Protokollierung denen protokollieren die Abfragen in einer Datei oder syslog (einschließlich gebundener Parameter) auf dem Server, dann laden Sie über diese Datei in eine PostgreSQL Tabelle.

Andere Tipps

Wenn Sie nicht jedes Vorkommen von pg_query_params () im Quellcode mit Ihrem eigenen Wrapper-Funktion ersetzen können (wenn Sie können, dann könnten Sie die Auto prepend Funktionalität in PHP verwenden möchten, um die Deklaration der Umhüllung enthalten), dann können Sie nur das wirklich tun auf Datenbankebene.

C.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top