2015-08-04 23 views
8

Bu, ASP.NET web formlarında, bir ekranda bir kayıt düğmem var. Sayfayı başlangıçta yüklediğimde, belirli koşullar altında, kaydetme düğmesi oluşturulmaz. Benim düğmesi tıklandığında durumundaBir düğme, düğme oluşturulmamışsa, bir düğme tıklama olayına program aracılığıyla ulaşabilir mi?

button1.visible = false 

, ben kaydedilmesini olmak kullanıcıyı engelleyen tek güvenlik kurtarmak düğme render olup olmadığına bu

public void button1_click(Object sender, EventArgs e) 
{ 
    SaveData(); 
} 

var.

MVC'de, kendi değiştirilen isteğimle sunucuya bir HTTP POST işlemi yaparak kaydetme düğmesi eylem yöntemine erişmek önemsiz olur.

ASP.NET Web formlarında biraz karışıkım çünkü şifrelenmiş ViewState'e geri gönderiliyor. Bu güvenliği yine de button1_click etkinliğine eklemem gerekiyor mu? Öyleyse, bir istemcinin düğmenin tıklatma etkinliğine erişebilecek ve düğmeyi görünmeden sunucuya nasıl geri gönderebileceğini söyleyebilir misiniz?

+1

Kesinlikle ilginç bir soru. Herhangi bir cevaba bakılmaksızın, muhtemelen "talebin aldatılmış olabileceğini ve her zaman yetkilendirmeyi kontrol edeceğini" düşünürdüm. Güvenlik, istekte bulunurken kullanıcıya her zaman istek için seçenek sunarken olmaz. İkincisi sadece UX değil, güvenlik değil. – David

+2

@david - evet kesinlikle. Ben sadece bunun potansiyel olarak nasıl kullanılabileceği ile ilgileniyorum – Diskdrive

+0

Sadece temel güvenlik özelliklerini uygulayamazsanız MVC'de söylediğin gibi "önemsiz" ve aynı ASP.NET Web Formları için de geçerli. Muhtemelen potansiyel olarak sömürülüyor olabilir (pek çok "ifs ve buts" 'a güvenmediğiniz sürece.) –

cevap

4

Bu, ViewState ile ilgili yaygın hatalardan biridir - tıklama etkinliklerinize ve diğer pek çok şeye hizmet etmez.

Her bir tıklama düğmesi (veya otomatik sıfırlama etkinse onay kutusu) sunucuya gönderilecek bir formu yükseltir. Ve neyin tıklandığıyla ilgili tüm bilgiler, yeniden gönderim verileri biçiminde düz metin olarak yer almaktadır. Daha sonra sunucu bu verileri ayrıştırır ve düğmenizde IPAPBackDataHandler uygulandığı için "düğme kimliği tıklatılmış" gibi uygun olayları kaldırır. Eğer id = ctl00__pdContent_txtEmail ile giriş içeriğini görmek ve id = ctl00__pdContent_btnRtnUser ile giriş düğmesine tıklandığında olabilir Üstü

D__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPD...&ctl00%24_pdContent%24txtEmail=qwe%40aeqw.ry&ctl00%24_pdContent%24btnRtnUser=Login&__EVENTVALIDATION=%2FwEWDAL424aUAQLjtYbqCAKu8qTUCQLXm%2BfNAwKk2O%2B4DgK3ypStCAL6q%2BaACgKBnvb9CQLr8ey6CALxoZvDCALFt96ABgLMorjMAwoW3zW69NNlOXygWNnB6luGVWnk 

: Yani aslında istek gövdesini değiştirebilir.

WebForms here'deki sunucu olaylarıyla ilgili daha fazla açıklama.

Lütfen ViewState here veya daha iyi bir açıklamayı okuyun here. düğme sürece set ilgili güvenlik ayarlarına sahip olarak işlenen değilse o düğme tıklama etkinliğini ulaşmak olanaksızdır gibi

+1

@LaoR ne dedi.- Sizin özelliklerine bağlı olarak - isteğinize bir __AntiXsrfToken çerezi eklemeniz gerekebilir, ancak temel nokta, sunucu tarafı tıklama etkinliğini başarıyla tetiklemek için gereken tüm verilerin ve 'button1_click' yönteminin çalıştırılmasını sağlamaktır. istemci (tarayıcı) için. Bu Fiddler ya da benzer bir şey kullanılarak kolayca test edilebilir. –

+0

Ancak istemci tarafında bu kimlikler değil mi? Düğme hiçbir zaman oluşturulmadığından, html'de görünmez. Düğme tıklaması için bu istek gövdesini nasıl değiştirirsiniz? Kimlik ne olmalı? – Diskdrive

+0

@Diskdrive - herhangi bir javascript hata ayıklama aracında, basit parametrelerle "__doPostBack" ifadesini kullanabilirsiniz. – Igor

1

https://stackoverflow.com/a/24064375/279911

başka soru üzerine bu yanıta göre, görünüyor.

Evet, yanlış olarak bir düğmenin Görünür özelliğini ayarlayarak sürece değil varsayılan ASP.NET güvenlik özellikleri devre dışı dönüş yaptığı gibi, kalkık olmaktan Click ve Komut olayları önlemek için yeterli değildir.

+0

Aklımda kalmak için [orijinal yanıt] (http://stackoverflow.com/a/24064375/1127114) bir daha önemli şeyle güncelledim. İlk mermi noktasına bakın. –

+0

Görünürlüğü yanlış olarak ayarlamak, _not_ olayların kaldırılmasını engeller. Geçerli bir görüntülemeyi zaten yakaladıysanız ve neyin yapılmadığını ve ardından bir isteği yeniden gönderdiyseniz, elbette olaylar tetiklenir. Tartışma kafa karıştırıyor, ama burada asıl soruyu yorumlamamla birlikte, bu bağlamda Michaels'in cevabını doğru olarak sunmak bir hatadır. –

+0

Bu konuda kabul edilmesi gereken önemli nokta, gerçek düğmenin oluşturulmasının veya oluşturulmasının bir güvenlik sorunu olmamasıdır. Bu bir UI kararı. (Ve sunucu, müşterinin "durumunu" yorumlamak için kaydedilen verilere, talebin geçerliliğine ve ne yapılacağını yorumlamaya dayanır. Önceki yanıtta müşteriye hangi verilerin verildiği bilinmemektedir.) Düşünmemelidir. diğer güvenlik önlemleri için - veya bununla bağlantılı - bazılarının değiştirilmesi. –