Ochraňte chování serveru ColdFusion aplikace Dreamweaver před útoky prostřednictvím injektáže SQL.

Bezpečnostní riziko útoků prostřednictvím injektáže SQL

Některé databáze umožňují odeslání několika příkazů SQL v jednom dotazu. V důsledku toho existují potenciální bezpečnostní rizika při předání parametrů v řetězci dotazu do dynamicky generovaného databázového dotazu. Hackeři se mohou pokusit změnit adresu URL nebo proměnné ve formuláři v dynamickém dotazu připojením škodlivých příkazů SQL k existujícím parametrům. Tento postup se často označuje jako útok prostřednictvím injektáže SQL. Některé z kódů chování serveru vytvořených aplikací Dreamweaver je třeba změnit, aby se snížilo riziko útoků prostřednictvím injektáže SQL. Další doplňující informace o injektáži SQL najdete v tomto článku webové encyklopedie Wikipedia.

Poznámka:instalačním programu aktualizace na aplikaci Dreamweaver 8.0.2 byl problém popsaný v tomto článku opraven.

Řešení: Aktualizace chování serveru

Když řetězci dotazu umožníte předat parametr, zajistěte, aby byly předány pouze očekávané informace. Společnost Adobe vytvořila instalační program aktualizace na aplikaci Dreamweaver 8.0.2, který snižuje riziko útoků prostřednictvím injektáže SQL. Tyto opravy jsou začleněny do všech následujících verzí aplikace Dreamweaver. Po aktualizaci aplikace Dreamweaver 8 bude třeba znovu použít chování serveru na stránky, pro které toto chování platí, a poté tyto stránky znovu nasadit na server.

Ve zbývající části tohoto dokumentu je popsáno, jak ručně upravit kód aplikace Dreamweaver MX 2004, aby bylo zabráněno útokům prostřednictvím injektáže SQL v případě modelu serveru ColdFusion. Chování serveru, u kterých hrozí nebezpečí těchto útoků, jsou uvedena níže, včetně oprav:

Sada záznamů s filtrem

Nefiltrované sady záznamů není třeba měnit, avšak filtrované sady záznamů ano. V příkladu níže je sada záznamů s názvem "Recordset1" filtrována pomocí hodnoty ID předané z parametru URL. Je třeba změnit níže zvýrazněný kód:

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

Chcete-li ochránit sadu záznamů před útoky prostřednictvím injektáže SQL, použijte tag cfqueryparam v rámci tagu cfquery, který obsahuje příkaz SELECT jazyka SQL. Tag cfqueryparam ověří typ dat parametru dotazu a pomůže zabezpečit databáze před neoprávněnými uživateli. Žlutě zvýrazněná čára představuje změněný zabezpečený kód:

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

Chování serveru na základě vložení záznamu a průvodce formulářem vložení záznamu

Chcete-li ochránit sadu záznamů před útoky prostřednictvím injektáže SQL, použijte tag cfqueryparam v rámci tagu cfquery, který obsahuje příkaz INSERT jazyka SQL. Tag cfqueryparam ověří typ dat parametru dotazu a pomůže zabezpečit databáze před neoprávněnými uživateli.

Původní kód. Bude třeba změnit níže zvýrazněný kód:

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

Změněný zabezpečený kód:

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

Poznámka: Vyberte příslušné hodnoty cfslqtype a maxlength dat.

Aktualizace záznamu a průvodce formulářem aktualizace záznamu

Chování serveru na základě aktualizace záznamu a průvodce formulářem aktualizace záznamu vyžadují kombinaci výše uvedených oprav. Nejprve vyhledejte tag cfquery, který obsahuje příkaz SELECT jazyka SQL, a upravte jej podle popisu v části Sada záznamů s filtrem. Poté vyhledejte tag cfquery, který obsahuje příkaz UPDATE jazyka SQL, a upravte jej podle popisu v části Chování serveru na základě vložení záznamu a průvodce formulářem vložení záznamu.

Chování serveru na základě odstranění záznamu

Změna chování serveru na základě odstranění záznamu je podobná změně v případě sady záznamů s filtrem.

Původní kód:

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

Změněný zabezpečený kód:

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

Poznámka: Vyberte příslušné hodnoty cfslqtype a maxlength dat.

Chování serveru na základě přihlášení uživatele

Chcete-li opravit kód chování serveru na základě přihlášení uživatele, vyhledejte tagy cfquery a přidejte tagy cfqueryparam.

Původní kód:

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

Změněný zabezpečený kód:

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

Poznámka: Vyberte příslušné hodnoty cfslqtype a maxlength dat.

Chování serveru na základě kontroly nového uživatele

V případě chování serveru na základě kontroly nového uživatele je třeba na stránku nejprve přidat chování serveru na základě vložení záznamu. Nejprve vyhledejte tag cfquery, který obsahuje příkaz SELECT jazyka SQL, a upravte jej podle popisu v části Sada záznamů s filtrem. Poté vyhledejte tag cfquery, který obsahuje příkaz INSERT jazyka SQL, a upravte jej podle popisu v části Chování serveru na základě vložení záznamu a průvodce formulářem vložení záznamu.

Sada hlavní stránky a stránky podrobností

V případě aplikačního objektu sady hlavní stránky a stránky podrobností jsou změny hlavně v sadě záznamů, kterou aplikace Dreamweaver vytvoří pro stránku podrobností. Pokud nemáte filtrovanou sadu záznamů na hlavní stránce, není třeba provádět žádné změny hlavní stránky. Pokud máte filtrovanou sadu záznamů na hlavní stránce, přečtěte si část Sada záznamů s filtrem a aktualizujte kód sady záznamů.

V případě stránky podrobností vyhledejte tag cfquery, který obsahuje příkaz SELECT jazyka SQL, a upravte jej podle popisu v části Sada záznamů s filtrem.

Další informace

Společnost Adobe doporučuje použít tag cfqueryparam v rámci každého tagu cfquery, což vám pomůže zabezpečit databáze před neoprávněnými uživateli. Další informace viz:

Tato práce podléhá licenci Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Na příspěvky ze služeb Twitter™ a Facebook se nevztahují podmínky licence Creative Commons.

Právní upozornění   |   Zásady ochrany osobních údajů online