Schützen Sie das ColdFusion-Serververhalten von Dreamweaver vor dem Sicherheitsrisiko durch Einschleusung von SQL-Befehlen.
Sicherheitsrisiko durch Einschleusung von SQL-Befehlen
Mit einigen Datenbanken können Sie mehrere SQL-Anweisungen in einer einzelnen Abfrage senden. Aus diesem Grund gibt es mögliche Sicherheitsrisiken, wenn Sie die Parameter in einer Abfragezeichenfolge zu einer dynamisch generierten Datenbankabfrage weiterleiten. Hacker versucht möglicherweise eine URL zu ändern oder Variablen in einer dynamischen Abfrage zu ändern, indem sie schädliche SQL-Anweisungen an vorhandenen Parameter anzufügen. Dies wird häufig als Sicherheitsrisiko durch Einschleusung von SQL-Befehlen bezeichnet. Einige der Serververhaltencodes, die von Dreamweaver erstellt wurden, müssen geändert werden, um das Sicherheitsrisiko durch Einschleusung von SQL-Befehlen zu reduzieren. Weitere Informationen zum Sicherheitsrisiko durch Einschleusung von SQL-Befehlen finden Sie im Wikipedia-Artikel.
Hinweis: Das Problem, das in diesem Artikel beschrieben wurde, wurde im Dreamweaver 8.0.2 Updater behoben.
Lösung: Aktualisieren Sie das Serververhalten
Wenn Sie zulassen, dass ein Abfragestring einen Parameter übergibt, stellen Sie sicher, dass nur die gewünschten Informationen übermittelt werden. Adobe hat Dreamweaver 8.0.2 Updater erstellt, der das Sicherheitsrisiko durch Einschleusung von SQL-Befehlen reduziert. Diese Problembehebungen werden in alle folgenden Versionen von Dreamweaver einbezogen. Nachdem Sie Dreamweaver 8 aktualisiert haben, müssen Sie das Serververhalten auf den Seiten erneut anwenden, die es verwenden, und dann die Seiten auf dem Server wieder bereitstellen.
In den verbleibenden Abschnitten dieses Dokuments wird beschrieben, wie Sie Dreamweaver MX 2004-Codes manuell bearbeitet, um das Sicherheitsrisiko durch Einschleusung von SQL-Befehlen zu verhindern. Serververhalten, das für diese Angriffe anfällig ist, werden zusammen mit den Änderungen nachfolgend aufgeführt:
- Datensatz mit einem Filter
- Formularassistent für Datensatzserververhalten und Datensatzeinfügen
- Formularassistent für Datensatz aktualisieren und Datensatzaktualisierung
- Serververhalten „Datensatz löschen“
- Serververhalten „Benutzer anmelden“
- Serververhalten „Neuen Benutzer überprüfen“
- Master-Detailseitensatz
Datensatz mit einem Filter
Ungefilterte Datensatzgruppen müssen nicht geändert werden, aber gefilterte Datensatzgruppen müssen geändert werden. Im nachfolgenden Beispiel wird eine Dreamweaver MX 2004-Datensatzgruppe mit dem Namen „Recordset1“ nach einem ID-Wert gefiltert, der von einem URL-Parameter gesendet wurde. Der nachfolgend markierte Code muss geändert werden:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =#URL.COMMENT_ID#</cfquery>
Um die Datensatzgruppe vor dem Sicherheitsrisiko durch Einschleusung von SQL-Befehlen zu schützen, verwenden Sie den Tag cfqueryparam innerhalb des Tags cfquery, der die SQL SELECT-Anweisung enthält. Der Tag cfqueryparam überprüft den Datentyp des Abfrageparameters, sodass Sie Ihren Datenbanken vor nicht autorisierten Benutzern schützen können. Die gelbe Zeile ist der geänderte sichere Code:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
Formularassistent für Datensatzserververhalten und Datensatzeinfügen
Um die Datensatzgruppe vor dem Sicherheitsrisiko durch Einschleusung von SQL-Befehlen zu schützen, verwenden Sie den Tag cfqueryparam innerhalb des Tags cfquery, der die SQL INSERT-Anweisung enthält. Der Tag cfqueryparam überprüft den Datentyp des Abfrageparameters, sodass Sie Ihren Datenbanken vor nicht autorisierten Benutzern schützen können.
Originalcode. Der nachfolgend markierte Code muss geändert werden:
<cfquery datasource="cafetownsend"> INSERT INTO COMMENTS (FIRST_NAME, LAST_NAME, TELEPHONE) VALUES (<cfif IsDefined("FORM.textfield1") AND #FORM.textfield1# NEQ "">'#FORM.textfield1#'<cfelse>NULL</cfif> ,<cfif IsDefined("FORM.textfield2") AND #FORM.textfield2# NEQ "">'#FORM.textfield2#'<cfelse>NULL</cfif> ,<cfif IsDefined("FORM.textfield3") AND #FORM.textfield3# NEQ "">'#FORM.textfield3#'<cfelse>NULL</cfif> )</cfquery>
Geänderter sicherer Code:
<cfquery datasource="cafetownsend"> INSERT INTO COMMENTS (FIRST_NAME, LAST_NAME, TELEPHONE) VALUES<cfif IsDefined("FORM.textfield1") AND #FORM.textfield1# NEQ ""><cfqueryparam value="#FORM.textfield1#" cfsqltype="cf_sql_clob" maxlength="50"><cfelse>''</cfif> ,<cfif IsDefined("FORM.textfield2") AND #FORM.textfield2# NEQ ""><cfqueryparam value="#FORM.textfield2#" cfsqltype="cf_sql_clob" maxlength="50"><cfelse>''</cfif> ,<cfif IsDefined("FORM.textfield3") AND #FORM.textfield3# NEQ ""><cfqueryparam value="#FORM.textfield3#" cfsqltype="cf_sql_clob" maxlength="20"><cfelse>''</cfif> )</cfquery>
Hinweis: Wählen Sie die entsprechenden cfslqtype- und maxlength-Werte für Ihre Daten aus.
Formularassistent für Datensatz aktualisieren und Datensatzaktualisierung
Der Formularassistent „Serververhalten Datensatz aktualisieren und Datensatzaktualisierung erfordern eine Kombination der obigen Korrekturen. Suchen Sie zunächst nach dem cfquery, das die SQL-SELECT-Anweisung enthält und ändern Sie es, wie in der Datensatzgruppe mit einem Filter. Suchen Sie zunächst nach dem cfquery, das die SQL-SELECT-Anweisung enthält und ändern Sie es, wie in der Datensatzgruppe mit einem Filter beschrieben.
Serververhalten „Datensatz löschen“
Die Änderung für Serververhalten „Datensatz löschen“ ist ähnlich dem für Datensatzgruppe mit einem Filter.
Originalcode:
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=#URL.COMMENT_ID#</cfquery>
Geänderter sicherer Code:
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
Hinweis: Wählen Sie die entsprechenden cfslqtype- und maxlength-Werte für Ihre Daten aus.
Serververhalten „Benutzer anmelden“
Um den Code Serververhalten „Benutzer anmelden“ zu beheben, suchen Sie nach den Tags cfquery und fügen Sie cfqueryparam hinzu.
Originalcode:
<cfquery name="MM_rsUser" datasource="cafetownsend"> SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME='#FORM.textfield1#' AND LAST_NAME='#FORM.textfield2#'</cfquery>
Geänderter sicherer Code:
<cfquery name="MM_rsUser" datasource="cafetownsend"> SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME=<cfqueryparam value="#FORM.textfield1#" cfsqltype="cf_sql_clob" maxlength="50"> AND LAST_NAME=<cfqueryparam value="#FORM.textfield2#" cfsqltype="cf_sql_clob" maxlength="50"></cfquery>
Hinweis: Wählen Sie die entsprechenden cfslqtype- und maxlength-Werte für Ihre Daten aus.
Serververhalten „Neuen Benutzer überprüfen“
Das Serververhalten „Neuen Benutzer überprüfen“ verlangt, dass das Serververhalten „Datensatz einfügen“ zunächst zur Seite hinzugefügt wird. Suchen Sie zunächst nach dem cfquery, das die SQL-SELECT-Anweisung enthält und ändern Sie es, wie in der Datensatzgruppe mit einem Filter. Suchen Sie zunächst nach dem cfquery, das die SQL-INSERT-Anweisung enthält und ändern Sie es, wie in der Datensatzgruppe mit einem Filter beschrieben.
Master-Detailseitensatz
Für das Anwendungsobjekt des Master-Detailseitensatzes sind die Änderungen in erster Linie in der Datensatzgruppe, die Dreamweaver für die Detail-Seite erstellt. Wenn Sie keine gefilterte Datensatzgruppe auf der Masterseite sehen, müssen keine Änderungen an der Masterseite vorgenommen werden. Wenn Sie eine gefilterte Datensatzgruppe auf der Masterseite sehen, finden Sie weitere Informationen unter Datensatzgruppe mit einem Filter, um den Datensatzgruppencode zu aktualisieren.
Suchen Sie zunächst für die Detailseite nach dem cfquery, das die SQL-SELECT-Anweisung enthält und ändern Sie es, wie in der Datensatzgruppe mit einem Filter beschrieben.
Weitere Informationen
Adobe empfiehlt, dass Sie den Tag cfqueryparam innerhalb jedes cfquery-Tags verwenden, um Ihre Datenbanken vor nicht autorisierten Benutzern zu schützen. Weitere Informationen finden Sie unter: