मैंने एक asp.net एप्लिकेशन पर काम किया, जो एक प्रमुख सुरक्षा कंपनी द्वारा एक सुरक्षा ऑडिट के माध्यम से चला गया और मैंने एक कम ज्ञात लेकिन महत्वपूर्ण सुरक्षा भेद्यता को रोकने के लिए यह आसान चाल सीखी।
नीचे दी गई व्याख्या इस प्रकार है:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKser_to_Counter_One-Click_Attacks
एक-क्लिक हमलों का सामना करने के लिए Page.ViewStateUserKey का उपयोग करने पर विचार करें। यदि आप अपने कॉलर्स को प्रमाणित करते हैं और ViewState का उपयोग करते हैं, तो एक क्लिक हमलों को रोकने के लिए Page_Init इवेंट हैंडलर में Page.ViewStateUserKey गुण सेट करें।
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
संपत्ति को उस मूल्य पर सेट करें जिसे आप जानते हैं कि प्रत्येक उपयोगकर्ता के लिए अद्वितीय है, जैसे कि सत्र आईडी, उपयोगकर्ता नाम या उपयोगकर्ता पहचानकर्ता।
एक क्लिक पर हमला तब होता है जब कोई हमलावर वेब पेज (.htm या .aspx) बनाता है जिसमें __VIEWSTATE नाम का एक छिपा हुआ फ़ॉर्म फ़ील्ड होता है जो पहले से ही ViewState डेटा से भरा होता है। ViewState को उस पृष्ठ से उत्पन्न किया जा सकता है जिसे हमलावर ने पहले बनाया था, जैसे कि 100 आइटम के साथ खरीदारी कार्ट पृष्ठ। हमलावर पृष्ठ पर ब्राउज़ करने के लिए एक असुरक्षित उपयोगकर्ता को फुसलाता है, और फिर हमलावर पृष्ठ को सर्वर पर भेजा जाता है जहां ViewState मान्य है। सर्वर के पास यह जानने का कोई तरीका नहीं है कि व्यूस्टैट हमलावर से उत्पन्न हुआ है। ViewState सत्यापन और HMAC इस हमले का विरोध नहीं करते क्योंकि ViewState मान्य है और पृष्ठ को उपयोगकर्ता के सुरक्षा संदर्भ के तहत निष्पादित किया जाता है।
ViewStateUserKey संपत्ति सेट करके, जब हमलावर ViewState बनाने के लिए एक पृष्ठ पर पहुंचता है, तो संपत्ति उसके नाम से आरंभ की जाती है। जब वैध उपयोगकर्ता पृष्ठ को सर्वर में भेजता है, तो इसे हमलावर के नाम के साथ आरम्भ किया जाता है। नतीजतन, ViewState HMAC चेक विफल हो जाता है और एक अपवाद उत्पन्न होता है।