Bu yazımda asp.net ile geliştirilmiş ürünlerde dikkat etmemiz gereken bir takım güvenlik önlemlerinden bahsedeceğim umarım faydası olur kolay gelsin.
Sql Injection
Blind Sql Injection
Auto Complete Enabled
ASP.NET Version Disclousere
Encrypted ViewState
Application Error Message
Directory Listing
Possible debug parameter found
Clickjacking: X-Frame-Options header missing
Login page password-guessing attack
Sql Injection
Uygulamaların veritabanı işlemlerinde ORM (Object relational
mapping) gibi ara katmanlar kullanılmalıdır. Eğer sql cümlecikleri kullanılacak
ise parametrik bir yapı kullanılarak
prepare statement hazırlanması sağlanmalıdır.
Blind Sql Injection
Uygulamaların “View” katmanında veritabanı işlemleri
yapılmamalıdır. Bütün veritabanı işlemleri Database Access Layer da
olmalıdır. Örneğin uygulamada Linq
kullanılıyor varsayımı ile “View” içerisinde Linq Data Context bile
oluşturulmamalıdır.
Auto Complete Enabled
Login sayfasında yer alan textbox’ların “AutoCompleteType”
özellikleri disabled yapılarak, paylaşımda olan bir bilgisayarda başka bir
kullanıcının başka bir kullanıcı yetkileriyle sisteme login olması
engellenmelidir.
ASP.NET Version Disclousere
Uygulamanın Asp.Net versiyonu gizlenmelidir. Gizlenmemsi
durumunda hackerlara yol gösterici olabilir. Bu sebeple uygulamanın
“web.config” dosyasında aşağıdaki tag kullanılmalıdır.
< httpRuntime enableVersionHeader="false" />
Encrypted ViewState
ASP.Net uygulamalarında viewstate şifrelenmelidir. Bu
işlemin uygulama performansını düşüreceği ise unutulmamalıdır. Viewstate’i
şifrelemek için ise uygulamanın “web.config” dosyasında aşağıdaki tag
kullanılmalıdır.
<system.web>
<pages viewStateEncryptionMode="Always" />
</system.web>
Application Error Message
Uygulama içerisinde handle edilmemiş hata mesajları
yapılacak ataklar için yol gösterici olabilir bu sebeple uygulama içerisinde
oluşabilecek hatalarda sistem kendini hata sayfasına yönlendirmelidir.
<System.Web>
<customErrors mode="On" defaultRedirect="~/error/GeneralError.aspx">
<error statusCode="403" redirect="~/error/Forbidden.aspx" />
<error statusCode="404" edirect="~/error/PageNotFound.aspx" />
<error statusCode="500" redirect="~/error/InternalError.aspx" />
</system.web>
Directory Listing
Uygulamanın directory listing özelliği kapatılmalıdır. Bu
sebeple “web.config” dosyasında yer alan aşağıda ki tag kullanılmalıdır.
<system.webServer>
<directoryBrowse enabled="false" />
</system.webServer>
Possible debug parameter found
Gizli hata ayıklama
parametreleri kullanılmış olması ,bu parametrelerin kullanarak bilginin
açığa çıkması sebep olabilir. Bu sebeple “web.config” dosyasında debug
ile ilgili hiçbir şey yer almamalıdır. Ayrıca trace özelliği de kapatılmalıdır.
<compilation debug="false" />
<trace enabled="false" localOnly="true">
Clickjacking: X-Frame-Options header missing
Bir X-Frame-Options başlığı dönmediği için Sunucu bu Web
Clickjacking riski altında olabilir. Bu sebeple uygulamada yer alan “Global.asax”
dosyası içerisinde yer alan “Application_BeginRequest” eventi içerisinde
aşağıdaki kod kullanılmalıdır.
void
Application_BeginRequest(object sender, EventArgs e) {
HttpContext.Current.Response.AddHeader("x-frame-options",
" SAMEORIGIN");
}
Login page password-guessing attack
Password deneme saldırılılarına
karşı bir koruma içermelidir. Örneğin belirli bir deneme sonrası hesap
kilitleme gibi ya da captcha eklenmesi gibi.
Comments