Я працював над додатком asp.net, який пройшов аудит безпеки провідною охоронною компанією, і я дізнався цей простий трюк, щоб запобігти менш відомій, але важливій вразливості безпеки.
Нижче пояснення:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Подумайте про використання Page.ViewStateUserKey для протидії атакам одним клацанням. Якщо ви автентифікуєте своїх абонентів і використовуєте ViewState, встановіть властивість Page.ViewStateUserKey в обробнику подій Page_Init, щоб запобігти атакам одним кліком.
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
}
Встановіть для властивості значення, яке ви знаєте, унікальне для кожного користувача, наприклад, ідентифікатор сесії, ім’я користувача або ідентифікатор користувача.
Атака одним клацанням миші виникає, коли зловмисник створює веб-сторінку (.htm або .aspx), яка містить приховане поле форми під назвою __VIEWSTATE, яке вже заповнене даними ViewState. ViewState може бути створений зі сторінки, яку зловмисник раніше створив, наприклад сторінки кошика зі 100 предметами. Зловмисник заманює нічого не підозрюючого користувача переглядати сторінку, а потім зловмисник призводить до того, що сторінка буде надіслана серверу, де ViewState є дійсним. Сервер не може знати, що ViewState походить від зловмисника. Перевірка ViewState та HMAC не протидіють цій атаці, оскільки ViewState є дійсним, а сторінка виконується в контексті безпеки користувача.
Встановлюючи властивість ViewStateUserKey, коли зловмисник переходить на сторінку для створення ViewState, властивість ініціалізується на його ім’я. Коли законний користувач подає сторінку на сервер, вона ініціалізується з ім'ям зловмисника. Як результат, перевірка HSM ViewState виходить з ладу і створюється виняток.