Dreamweaver'ın ColdFusion sunucu davranışlarını SQL ekleme saldırılarına karşı koruyun.
SQL ekleme saldırılarının güvenlik riski
Bazı veritabanları, tek bir sorguda birden fazla SQL ifadesi göndermenize olanak tanır. Bu nedenle bir sorgu dizisinde parametreleri dinamik olarak oluşturulan bir veritabanı sorgusuna aktardığınızda potansiyel güvenlik riskleri bulunmaktadır. Bilgisayar korsanları, URL'yi değiştirmeye ya da mevcut parametrelere kötü amaçlı SQL ifadeleri ekleyerek dinamik bir sorguda değişkenler oluşturmaya çalışabilir. Buna genellikle SQL ekleme saldırısı denir. Dreamweaver tarafından oluşturulan sunucu davranış kodlarının bazıları, SQL ekleme saldırıları riskini azaltmak için değiştirilmelidir. SQL ekleme hakkında daha fazla bilgi için bu Wikipedia makalesine bakabilirsiniz.
Not: Bu makalede açıklanan sorun, Dreamweaver 8.0.2 Güncellemesi'nde çözülmüştür.
Çözüm: sunucu davranışlarını güncelleyin
Bir sorgu dizisinin bir parametreyi aktarmasına izin verirseniz, yalnızca beklenen bilgilerin aktarıldığından emin olun. Adobe SQL ekleme saldırıları riskini azaltan Dreamweaver 8.0.2 Güncellemesini yaptı. Bu düzeltmeler, Dreamweaver'ın sonraki bütün sürümlerine dahil edilmiştir. Dreamweaver 8'i güncelledikten sonra sunucu davranışlarını kullanan sayfalara bunları yeniden uygulamanız ve ardından bu sayfaları sunucunuza yeniden yüklemeniz gerekmektedir.
Bu belgenin devamında, ColdFusion sunucu modeliyle SQL ekleme saldırılarını önlemek için Dreamweaver MX 2004 kodunun manuel olarak nasıl düzenleneceği açıklanmaktadır. Bu saldırılar karşısında zayıf olan sunucu davranışları, düzeltmeleriyle birlikte aşağıda sıralanmıştır:
Filtreli Kayıt Kümesi
Filtrelenmemiş kayıt kümelerinin değiştirilmesi gerekmez ancak filtrelenmiş kayıt kümelerinin değiştirilmesi gerekir. Aşağıdaki örnekte, "Recordset1" adlı bir Dreamweaver MX 2004 kayıt kümesi, bir URL parametresinden aktarılan bir kimlik değeri ile filtrelenmiştir. Aşağıda vurgulanan kodun değiştirilmesi gereklidir:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =#URL.COMMENT_ID#</cfquery>
Kayıt kümesini SQL ekleme saldırılarından korumak için SQL SELECT ifadesini içeren cfquery etiketindeki cfqueryparam etiketini kullanın. Cfqueryparam etiketi, sorgu parametresinin veri türünü doğrular ve veritabanınızı yetkisiz kullanıcılardan korumaya yardımcı olur. Sarı satır, değiştirilmiş güvenli koddur:
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
Kayıt Ekleme sunucu davranışları ve Kayıt Ekleme Formu Sihirbazı
Kayıt kümesini SQL ekleme saldırılarından korumak için SQL INSERT ifadesini içeren cfquery etiketindeki cfqueryparam etiketini kullanın. Cfqueryparam etiketi, sorgu parametresinin veri türünü doğrular ve veritabanınızı yetkisiz kullanıcılardan korumaya yardımcı olur.
Orijinal kod. Aşağıda vurgulanan kodun değiştirilmesi gereklidir:
<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>
Değiştirilmiş güvenli 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>
Not: Veriniz için uygun cfslqtype ve maxlength değerlerini seçin.
Kayıt Güncelleme ve Kayıt Güncelleme Formu Sihirbazı
Kayıt Güncelleme sunucu davranışı ve Kayıt Güncelleme Formu Sihirbazı için yukarıdaki düzeltmelerin bir kombinasyonu gerekir. Öncelikle SQL SELECT ifadesini içeren cfquery'yi bulun ve Filtreli kayıt kümesi bölümünde anlatıldığı şekilde değiştirin. Daha sonra SQL UPDATE ifadesini içeren cfquery'yi bulun ve Kayıt Ekleme sunucu davranışları ve Kayıt Ekleme Formu Sihirbazı bölümünde anlatıldığı şekilde değiştirin.
Kayıt Silme sunucu davranışı
Kayıt Silme sunucu davranışı değiştirme, Filtreli kayıt kümesi için olanla benzerdir.
Orijinal kod:
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=#URL.COMMENT_ID#</cfquery>
Değiştirilmiş güvenli kod:
<cfquery datasource="cafetownsend"> DELETE FROM COMMENTS WHERE COMMENT_ID=<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"></cfquery>
Not: Veriniz için uygun cfslqtype ve maxlength değerlerini seçin.
Kullanıcı Oturumu Açma sunucu davranışı
Kullanıcı Oturumu Açma sunucu davranışını düzeltmek için cfquery etiketlerini bulun ve cfqueryparam etiketlerini ekleyin.
Orijinal 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>
Değiştirilmiş güvenli 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>
Not: Veriniz için uygun cfslqtype ve maxlength değerlerini seçin.
Yeni Kullanıcı Kontrol Etme sunucu davranışı
Yeni Kullanıcı Kontrol Etme sunucu davranışı, öncelikle sayfaya bir Kayıt Ekleme sunucu davranışı eklenmesini gerektirir. Öncelikle SQL SELECT ifadesini içeren cfquery'yi bulun ve Filtreli kayıt kümesi bölümünde anlatıldığı şekilde değiştirin. Daha sonra SQL INSERT ifadesini içeren cfquery'yi bulun ve Kayıt Ekleme sunucu davranışları ve Kayıt Ekleme Formu Sihirbazı bölümünde anlatıldığı şekilde değiştirin.
Kalıp Ayrıntı Sayfası Kümesi
Kalıp Ayrıntı Sayfası Kümesi uygulama nesnesi için değişiklikler çoğunlukla Dreamweaver'ın Ayrıntı Sayfası için oluşturduğu kayıt kümesindedir. Kalıp Sayfası'nda filtrelenmiş bir kayıt kümesi yoksa o zaman Kalıp Sayfası'nda bir değişiklik yapılmasına gerek yoktur. Kalıp Sayfası'nda filtrelenmiş bir kayıt kümesi varsa o zaman kayıt kümesi kodunu güncellemek için Filtreli kayıt kümesi bölümüne bakınız.
Ayrıntı Sayfası için, SQL SELECT ifadesini içeren cfquery'yi bulun ve Filtreli kayıt kümesi bölümünde anlatıldığı şekilde değiştirin.
Ek bilgiler
Adobe, veritabanlarınızı yetkisiz kullanıcılardan korumanıza yardımcı olmak için her cfquery etiketinde cfqueryparam etiketini kullanmanızı tavsiye etmektedir. Daha fazla bilgi için bkz: