Я работал над приложением 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, свойство инициализируется его именем. Когда законный пользователь отправляет страницу на сервер, она инициализируется именем злоумышленника. В результате проверка ViewState HMAC завершается неудачно, и создается исключение.