Реклама:

Подтверждение событий — это аффективная мера глубинкой защиты, которая, однако, увеличивает размер формируемой страницы. Независимо от того, подтверждены события в обработчике событий или нет, всегда следует повторно проверять, авторизован ли пользователь на выполнение операции, а не руководствоваться лишь тем, является ли соответствующий элемент управления пользовательского интерфейса вгтимым или скрытым.

Еще одна деликатная операция, которую может выполнять служба подтверждения событий, состоит в подтверждении возвращаемых формой данных из списка. Предположим, что в следующей простой странице вы можете выбирать клиента для получения, скажем, информации о контрактах. Естественно, вы можете видеть только данные собственных клиентов. (Хотя значения жестко закодированы, Суть идеи вы поймете.)

<Ш Page Language-'C«" EnableEventValidâtion="faise" %> <!D0CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " nt t p : //www . w3.0 rg/TR/x h 1. ml 1 /DTD/xh tml 1 -1 ra n si t iona 1. dt d '' > <script runal="server">

protected void _btnLoad_Click(object sender, EventArgs e)

{

string selectedCustoraer = Jst.Customers.SelectedValue; _lit0utput.Text * selectedCustoraer + " Details:

}

* К сожалению, в документации точно не указано, какие элементы управления поддерживают подтверждение событий, однако вы можете использовать Reflector для определения значения атрибута /SupporuEventvalidation/класса элемента управления. Я вы полнил такую проверку для элементов Image/Link Button, Check Box, Grid/Form/Details View, List Box/Drop Down List, Menu и Radio Button.

</script>

<ntml xmlns* http у*** л' сд/'ЭЭЭ/лпСТГ > <head runat="server >

<title>Untitled Page</title> </head> <Dody>

<form id="forml" runat="server"> <div>

Pick a customer: <br />

<asp:ListBox runat="server" ID="_lstCustomers">

<asp:ListItem>Contoso</asp:ListItem>

<asp: Ustltem>Woodgrove</asp:ListIrerr,>

<asp:ListItem>Northwind</asp:Listltem> </asp:l.istBox> <br />

<asp:Button runat="server" ID="_btnLoad" Text="Load"

OnClick='_btriLoad_Click'' /> <br /> <br />

<asp:Literal runat="server" ID="_litOutput" /> </div> </forn» </body> </html>

Передача формы обратно на сервер с выбранным клиентом Contoso выглядит так: _VIEWSTATE=*2.. &_lstCustomers=ContosoS_btnLoad=Load

А что произойдет, если вы вручную замените имя Contoso на Eahrikam — имя компании, к которой не имеете доступа?

Отраден тот фаю, что ASP.NET уже выполняет подтверждение переданного значения на уровне глубинной защиты и определяет, что этого значения не было в изначально пересланном наборе. Без подтверждения событий в JbtCustomers.SelectedValue будет содержаться пустая строка. При включенном подтверждении событий вы получите исключительную ситуацию ArgumentException. Я убежден, что предпочтительнее исключительная ситуация.


⇐ Предыдущая страница| |Следующая страница ⇒