Önde gelen bir güvenlik şirketi tarafından yapılan bir güvenlik denetiminden geçen bir asp.net uygulaması üzerinde çalıştım ve daha az bilinen ancak önemli bir güvenlik açığını önlemenin bu kolay yolunu öğrendim.
Aşağıdaki açıklama:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Tek tıklamayla saldırılara karşı koymak için Page.ViewStateUserKey kullanmayı düşünün. Arayanlarınızın kimliğini doğrular ve ViewState kullanırsanız, tek tıklatmayla saldırıları önlemek için Page_Init olay işleyicisinde Page.ViewStateUserKey özelliğini ayarlayın.
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
Özelliği, oturum kimliği, kullanıcı adı veya kullanıcı tanımlayıcısı gibi her kullanıcı için benzersiz olduğunu bildiğiniz bir değere ayarlayın.
Tek tıklatma saldırısı, bir saldırgan zaten ViewState verileriyle dolu __VIEWSTATE adlı gizli bir form alanı içeren bir Web sayfası (.htm veya .aspx) oluşturduğunda gerçekleşir. ViewState, 100 öğeye sahip bir alışveriş sepeti sayfası gibi saldırganın önceden oluşturduğu bir sayfadan oluşturulabilir. Saldırgan, şüpheli olmayan bir kullanıcıyı sayfaya göz atmaya yönlendirir ve ardından saldırgan, sayfanın ViewState'in geçerli olduğu sunucuya gönderilmesine neden olur. Sunucunun ViewState'in saldırgandan geldiğini bilmesinin bir yolu yoktur. ViewState doğrulaması ve HMAC'ler, ViewState geçerli olduğundan ve sayfa kullanıcının güvenlik bağlamında yürütüldüğünden bu saldırıya karşı gelmez.
ViewStateUserKey özelliğini ayarlayarak, saldırgan ViewState'i oluşturmak için bir sayfaya göz attığında, özellik adıyla başlatılır. Meşru kullanıcı sayfayı sunucuya gönderdiğinde, saldırganın adıyla başlatılır. Sonuç olarak, ViewState HMAC denetimi başarısız olur ve bir istisna oluşturulur.