Skydda Dreamweavers ColdFusion-serverfunktioner mot SQL-injektionsangrepp.
Säkerhetsrisk för SQL-injektionsangrepp
Vissa databaser gör det möjligt för dig att skicka flera SQL-satser i en enda förfrågan. På grund av detta finns det potentiella säkerhetsrisker när du skickar parametrar i en frågesträng till en dynamiskt genererad databasförfrågan. Hackare kan försöka ändra URL eller formulärvariabler i en dynamisk förfrågan genom att lägga till skadliga SQL-satser till befintliga parametrar. Det här kallas ofta ett SQL-injektionsangrepp. En del av serverfunktionskoden som har skapats av Dreamweaver ska ändras för att minska risken för SQL-injektionsangrepp. Mer bakgrundsinformation om SQL-injektioner finns i den här Wikipedia-artikeln.
Obs! Problemet som beskrivs i den här artikeln korrigerades i Dreamweaver 8.0.2 Updater.
Lösning: Uppdatera serverfunktionerna
Se till att endast den förväntade informationen skickas när du tillåter en frågesträng skicka en parameter vidare. Adobe har skapat en Dreamweaver 8.0.2 Updater som minskar risken för SQL-injektionsangrepp. Dessa korrigeringar är inkluderade i alla efterföljande versioner av Dreamweaver. Efter att du har uppdaterat Dreamweaver 8 måste du tillämpa serverfunktionerna på sidorna där de används på nytt och distribuera sedan dessa sidor till servern igen.
Resten av det här dokumentet beskriver hur du manuellt redigerar Dreamweaver MX 2004-kod för att förhindra SQL-injektionsangrepp med ColdFusion-servermodellen. Serverfunktioner som är sårbara för dessa angrepp listas nedan tillsammans med korrigeringarna:
- Postuppsättning med ett filter
- Guide för serverfunktionen Infoga post och Formulär för inmatning av poster
- Guide för Uppdatera post och Formulär för postuppdatering
- Serverfunktionen Ta bort post
- Serverfunktionen Logga in användare
- Serverfunktionen Kontrollera ny användare
- Huvudsiduppsättningen med information
Postuppsättning med ett filter
Ofiltrerade postuppsättningar behöver inte ändras men det behöver filtrerade postuppsättningar. I exemplet nedan filtreras en postuppsättning för Dreamweaver MX 2004 som kallas ”Recordset1” med ett ID-värde som skickas från en URL-parameter. Den markerade koden nedan är det som behöver ändras:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =#URL.COMMENT_ID#</cfquery>
För att skydda postuppsättningen från SQL-injektionsangrepp ska du använda taggen cfqueryparam inom taggen cfquery som innehåller SQL SELECT-satsen. Taggen cfqueryparam ska kontrollera datatypen för frågeparametern och hjälpa till att skydda dina databaser mot obehöriga användare. Raden i gult är den ändrade säkra koden:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
Guide för serverfunktionerna Infoga post och Formulär för inmatning av poster
För att skydda postuppsättningen från SQL-injektionsangrepp ska du använda taggen cfqueryparam inom taggen cfquery som innehåller SQL INSERT-satsen. Taggen cfqueryparam ska kontrollera datatypen för frågeparametern och hjälpa till att skydda dina databaser mot obehöriga användare.
Ursprunglig kod. Den markerade koden nedan är den som behöver ändras:
<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>
Ändrad säker kod:
<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>
Obs! Välj lämpliga värden för cfslqtype och maxlength för dina data.
Guide för Uppdatera post och Formulär för postuppdatering
Serverfunktionen Uppdatera post och Formulär för postuppdatering kräver en kombination av korrigeringarna ovan. Sök efter cfquery som innehåller SQL SELECT-satsen och ändra den som det beskrivs i Postuppsättning med ett filter. Sök sedan efter cfquery som innehåller SQL UPDATE-satsen och ändra den som det beskrivs i Guide för serverfunktionerna Infoga post och Formulär för inmatning av poster.
Serverfunktionen Ta bort post
Ändringen av serverfunktionen Ta bort post liknar den för Postuppsättning med ett filter.
Ursprunglig kod:
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=#URL.COMMENT_ID#</cfquery>
Ändrad säker kod:
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
Obs! Välj lämpliga värden för cfslqtype och maxlength för dina data.
Serverfunktionen Logga in användare
För att korrigera serverfunktionen Logga in användare ska du leta efter taggarna cfquery och lägga till taggarna cfqueryparam.
Ursprunglig kod:
<cfquery name="MM_rsUser" datasource="cafetownsend"> SELECT FIRST_NAME,LAST_NAME FROM COMMENTS WHERE FIRST_NAME='#FORM.textfield1#' AND LAST_NAME='#FORM.textfield2#'</cfquery>
Ändrad säker kod:
<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>
Obs! Välj lämpliga värden för cfslqtype och maxlength för dina data.
Serverfunktionen Kontrollera ny användare
Serverfunktionen Kontrollera ny användare kräver att serverfunktionen Infoga post läggs till på den första sidan. Sök först efter cfquery som innehåller SQL SELECT-satsen och ändra den som det beskrivs i Postuppsättning med ett filter. Sök sedan efter cfquery som innehåller SQL INSERT-satsen och ändra den som det beskrivs i Guide för serverfunktionerna Infoga post och Formulär för inmatning av poster.
Huvudsiduppsättningen med information
För tillämpningsobjektet Huvudsiduppsättning med information är ändringarna i huvudsak i postuppsättningen som Dreamweaver skapar för Informationssidan. Om du inte har en filtrerad postuppsättning på huvudsidan behöver inga ändringar göras på Huvudsidan. Om du har en filtrerad postuppsättning på Huvudsidan ska du sedan gå till Postuppsättning med ett filter för att uppdatera postuppsättningskoden.
För Informationssidan, sök efter cfquery som innehåller SQL SELECT-satsen och ändra den som det beskrivs i Postuppsättning med ett filter.
Ytterligare information
Adobe rekommenderar att du använder taggen cfqueryparam inom varje cfquery-tagg för att hjälpa till att skydda dina databaser mot obehöriga användare. Mer information finns i:
- Öka säkerheten med cfqueryparam
- Adobes säkerhetsbulletin:APSB 06-07 Dreamweavers serverfunktioners sårbarhet för SQL-injektioner