2016-04-29 10 views
0

Ich bin auf der Suche nach einem Tool, das durch meine Coldfusion-Code-Dateien gehen und cfqueryparam wo erforderlich hinzufügen wird. Ich fand viele, die scannen und mir zeigen, wo ich Änderungen vornehmen muss, aber ich fand eine bei http://www.webapper.com/blog/index.php/2008/7/22/ColdFusion-SQL-Injection, die ziemlich nah an dem ist, wonach ich suchte, aber es fügt den cfsqltype (oder maxlength) nicht hinzu. Ich frage mich, ob dies immer noch sql Injektion ohne cfsqltype verhindert? Wenn es erforderlich ist (ich weiß, dass es technisch optional ist), wissen Sie von einem anderen Werkzeug, das das tun wird? Ich glaube, dass es wichtig ist sicherzustellen, dass alle Variablen in der order by Klausel auch parametrisiert sind, für die dieses Tool nicht sucht.Tool zum Scannen von Abfragen und Hinzufügen von cfqueryparam, wo benötigt

Ich denke daran, den Code von http://www.webapper.com/blog/index.php/2008/7/22/ColdFusion-SQL-Injection zu knicken und zu ändern, um all dies zu tun, aber ich dachte, es wäre klug, zuerst zu fragen.

+0

Ohne cfsqltype Attribut wäre es cf_sql_varchar annehmen. Würde weiterhin die SQL-Injektion verhindern, da ein gebundener Parameter anstelle einer Zeichenfolge verwendet wird. Die Datenbank müsste jeden Parameter auf den Typ umwandeln, den die Datenbank für jede Spalte akzeptiert. Das könnte alles verlangsamen. –

+0

* verhindert immer noch die SQL-Injektion ohne cfsqltype * Ja, Bind-Variablen verhindern, dass der "Wert" als SQL-Befehle ausgeführt wird. Sie haben jedoch Recht, dass Sie den entsprechenden Typ verwenden sollten, um die [Gefahren der impliziten Konvertierung] zu umgehen (http://stackoverflow.com/questions/27049918/coldfusion-parameterizing-a-query/27066113#27066113). * Variablen in der order by-Klausel sind parametrisiert .. welche dieses Tool nicht überprüft * Sie können die Reihenfolge nicht nach (normalerweise) parametrisieren. Es verwendet Objektnamen, die als sql-Befehle ausgewertet werden müssen. Bind-Variablen sollen das * verhindern * verhindern. – Leigh

+0

(Bearbeiten) * knicken und den Code ändern * Ich glaube nicht, dass das leicht gemacht werden könnte. Um den cfsqltype zu ermitteln, müsste das Tool die SQL für jede Abfrage analysieren, alle beteiligten Tabellen identifizieren und anschließend die db-Metadaten abfragen, um die Spaltentypen zu identifizieren und sie dem entsprechenden cfsqltype zuzuordnen. Das ist im Nachhinein mit einer beliebigen Abfrage viel schwieriger zu machen. RE: * würde annehmen, cf_sql_varchar * Nun technisch 'cf_sql_char', aber yep .. im Wesentlichen ist es standardmäßig ein String-Typ :) – Leigh

Antwort

2

Verwenden Sie entweder dieses Tool oder QPScanner, um Ihre Codebasis zu scannen und Abfragen mit fehlenden cfqueryparm oder fehlenden cfprocparam zu finden.

Sobald Sie sie finden, MANUALLY UPDATE UND TEST Jede Instanz.

Drücken Sie nicht die Daumen und hoffen Sie, dass die Dinge funktionieren.

Ich bin durch diesen Prozess a number of times und ich kann garantieren, dass Sie Ihre Zeit zu aktualisieren den Code richtig nehmen sollen ..