Zabezpieczenie serwera Dreamweaver ColdFusion przed atakami SQL injection.

Zagrożenie atakami SQL injection

Niektóre bazy danych umożliwiają wysyłanie wielu poleceń SQL w jednym zapytaniu. Kreuje to potencjalne zagrożenia bezpieczeństwa powstające podczas przekazywania parametrów w ciągu zapytania do generowanej dynamicznie kwerendy bazy danych. Hakerzy mogą próbować przechwycić i zmodyfikować adres URL lub dołączyć zmienne do zapytania dynamicznego ze złośliwymi poleceniami SQL. Taki atak często jest określany nazwą SQL injection. Niektóre elementy kodu zachowania serwera Dreamweaver można zmienić tak, aby zmniejszyć ryzyko ataków SQL injection. Więcej informacji na temat ataków SQL injection podano w tym artykule w Wikipedii.

Uwaga: Problem opisany w tym artykule usunięto w aktualizacji Dreamweaver 8.0.2 Updater.

Rozwiązanie: Aktualizacja zachowań serwerowych

Jeśli w ciągu zapytania jest przekazywany parametr, zadbaj o to, by przesyłane były jedynie oczekiwane informacje. Firma Adobe przygotowała aktualizację Dreamweaver 8.0.2 Updater, która zmniejsza ryzyko ataków SQL injection. Poprawki te zostały włączone do wszystkich kolejnych wydań programu Dreamweaver. Po aktualizacji programu Dreamweaver należy ponownie zastosować zasady zachowania serwera na używających go stronach, a następnie ponownie wdrożyć te strony na serwerze.

W dalszej części tego dokumentu opisano sposób ręcznej edycji kody Dreamweaver MX 2004 w celu ochrony przed atakami SQL injection z modelem serwera ColdFusion. Poniżej przedstawiono zachowania serwera podatne na te ataki wraz z poprawkami:

Zestaw rekordów z filtrem

Niefiltrowane zestawy rekordów nie muszą być modyfikowane, ale filtrowane — tak. W poniższym przykładzie zestaw rekordów Dreamweaver MX 2004 o nazwie „Recordset1” jest filtrowany za pomocą identyfikatora przekazywanego z parametru URL. Elementem wymagającym zmiany jest wyróżniony poniżej kod:

<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =#URL.COMMENT_ID#</cfquery>

Aby zabezpieczyć zestaw rekordów przed atakami SQL injection, w znaczniku cfquery zawierającym polecenie SQL SELECT użyj znacznika cfqueryparam. Znacznik cfqueryparam zweryfikuje typ danych parametru zapytania i umożliwi zabezpieczenie baz danych przed nieautoryzowanymi użytkownikami. Wiersz wyróżniony na żółto to zmodyfikowany kod zabezpieczający:

<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>

Zachowanie serwera Wstawienie rekordu oraz Kreator formularza wstawiania rekordu

Aby zabezpieczyć zestaw rekordów przed atakami SQL injection, w znaczniku cfquery zawierającym polecenie SQL INSERT użyj znacznika cfqueryparam. Znacznik cfqueryparam zweryfikuje typ danych parametru zapytania i umożliwi zabezpieczenie baz danych przed nieautoryzowanymi użytkownikami.

Kod oryginalny. Elementem wymagającym zmiany jest wyróżniony poniżej kod:

<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>

Zmodyfikowany kod zabezpieczający:

<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>

Uwaga: Wybierz odpowiednie wartości cfslqtype oraz maxlength dla wykorzystywanych danych.

Aktualizacja rekordu oraz Kreator formularza aktualizacji rekordu

Zachowanie serwera Aktualizacja rekordu oraz kreator formularza aktualizacji rekordu wymagają kombinacji powyższych rozwiązań. Najpierw znajdź znacznik cfquery zawierający polecenie SQL SELECT i zmodyfikuj go w sposób opisany dla zestawu rekordów z filtrem. Następnie znajdź znacznik cfquery zawierający polecenie SQL UPDATE i zmodyfikuj go w sposób opisany dla Zachowanie serwera Wstawienie rekordu oraz Kreator formularza wstawiania rekordu.

Zachowanie serwera Usunięcie rekordu

Modyfikacja zachowania serwera Usunięcie rekordu jest podobna do modyfikacji dla opcji Zestaw rekordów z filtrem.

Kod oryginalny:

<cfquery datasource="cafetownsend">    DELETE FROM COMMENTS    WHERE COMMENT_ID=#URL.COMMENT_ID#</cfquery>

Zmodyfikowany kod zabezpieczający:

<cfquery datasource="cafetownsend">   DELETE FROM COMMENTS   WHERE COMMENT_ID=<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>

Uwaga: Wybierz odpowiednie wartości cfslqtype oraz maxlength dla wykorzystywanych danych.

Zachowanie serwera Zalogowanie użytkownika

Aby skorygować kod zachowania serwera Zalogowanie użytkownika, przejdź do znaczników cfquery i cfqueryparam.

Kod oryginalny:

<cfquery name="MM_rsUser" datasource="cafetownsend">   SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME='#FORM.textfield1#'   AND LAST_NAME='#FORM.textfield2#'</cfquery>

Zmodyfikowany kod zabezpieczający:

<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>

Uwaga: Wybierz odpowiednie wartości cfslqtype oraz maxlength dla wykorzystywanych danych.

Zachowanie serwera Sprawdzenie nowego użytkownika

Zachowanie serwera Sprawdzenie nowego użytkownika wymaga, aby najpierw dodać do strony zachowanie serwera Wstawienie rekordu. Najpierw znajdź znacznik cfquery zawierający polecenie SQL SELECT i zmodyfikuj go w sposób opisany dla zestawu rekordów z filtrem. Następnie znajdź znacznik cfquery zawierający polecenie SQL INSERT i zmodyfikuj go w sposób opisany dla Zachowanie serwera Wstawienie rekordu oraz Kreator formularza wstawiania rekordu.

Zestaw stron Dane podstawowe

W obiekcie aplikacji Zestaw stron Dane podstawowe zmiany dotyczą głównie zestawu rekordów tworzonego przez program Dreamweaver dla strony ze szczegółami. Jeśli nie na stronie podstawowej nie ma odfiltrowanego zestawu rekordów, nie muszą być na niej wprowadzane żadne zmiany. Jeśli nie na stronie podstawowej występuje odfiltrowany zestaw rekordów, zaktualizuj kod zestawu rekordów zgodnie z opisem w sekcji Zestaw rekordów z filtrem.

Na stronie ze szczegółami znajdź znacznik cfquery zawierający polecenie SQL SELECT i zmodyfikuj go w sposób opisany dla zestawu rekordów z filtrem.

Dodatkowe informacje

Adobe zaleca używanie znacznika cfqueryparam w każdym znaczniku cfquery. Pozwoli to na zabezpieczenie baz danych przed nieautoryzowanymi użytkownikami. Więcej informacji można znaleźć w sekcji:

Ta zawartość jest licencjonowana na warunkach licencji Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License  Posty z serwisów Twitter™ i Facebook nie są objęte licencją Creative Commons.

Informacje prawne   |   Zasady prywatności online