Как изменить состояние метки в ASP.net

Я где-то читал, что можно изменить viewstate, но я не нашел шагов для его достижения.

Например: я хочу изменить состояние представления метки, исходный текст ярлыка - "Привет", и я хочу изменить его на "Привет", изменив его состояние при обратной передаче.

Любое предложение будет оценено.

5 ответов

Я предполагаю, что вы говорите о злонамеренном изменении скрытого поля __VIEWSTATE как конечного пользователя, а не об изменении ViewState из кода. Это может или не может быть осуществимо (надеюсь, что нет), в зависимости от некоторых настроек вашего приложения. Два, которые собираются сделать это довольно сложно, это EnableViewStateMac и ViewStateEncryptionMode. Они часто устанавливаются на <pages> элемент в Web.config.

ViewStateEncryptionMode на самом деле не предназначен для предотвращения взлома ViewState; он предназначен для маскировки любого содержимого, встроенного в ViewState. Например, если вы решили добавить некоторую секретную информацию о себе в ViewState (например, ViewState["secretinfo"] = "My social security number is xxx-xx-xxxx.";), любой пользователь, который приходит и загружает вашу страницу, может взять ваше поле __VIEWSTATE и запустить его через декодер base64, чтобы найти ваш номер социального страхования - если, конечно, вы не шифруете ViewState.

Например, вот страница.aspx, которую я нашел с помощью простого поиска Google. Просмотрите исходный код, возьмите ViewState и вставьте его в этот декодер base64. Среди нескольких уродливых персонажей вы найдете кучу простого текста. Этот ViewState явно не был зашифрован (что, вероятно, неплохо).

Теперь, если вы любопытный или, возможно, злонамеренный человек, вы можете попытаться изменить часть текста, найденного в ViewState, перекодировать его в base64 и вернуть его обратно в поле __VIEWSTATE. (Во многих браузерах просто откройте консоль JS и введите document.querySelector("[name=__VIEWSTATE]").value = "whatever your base64 text is";.) Теперь, когда вы отправляете форму, страница будет отправлена ​​обратно с измененным ViewState.

Это где EnableViewStateMac вступает в игру. Как отмечает MSDN, этот параметр всегда должен быть включен на рабочем сайте, так как этот параметр предназначен для предотвращения вмешательства злоумышленников в поле __VIEWSTATE. Для упрощения он в основном вычисляет хеш (фактически код аутентификации сообщения) значения __VIEWSTATE и отправляет его вместе с __VIEWSTATE. (Он встроен в конец строки и не декодируется обратно в красивую текстовую строку.) Если вы измените какой-либо текст в __VIEWSTATE, сообщение больше не будет соответствовать MAC, и.NET перехватит это и выдаст исключение, прежде чем вы даже сможете обработать запрос.

TL; DR
Пока у вас включен EnableViewStateMac (что вам и нужно), вы не сможете изменить поле __VIEWSTATE.

Вы можете изменить состояние отображения метки, просто установив свойство Text для объекта метки в выделенном фрагменте кода. Большинство свойств встроенных элементов управления ASP.NET поддерживаются viewstate, поэтому установка свойства косвенным образом изменит состояние view для этого элемента управления.

В вашем.aspx:

<asp:Label id="myLabel" Text="Hi.." />

В вашем.aspx.cs:

myLabel.Text = "Hello";

Состояние просмотра хранится в скрытом поле на странице. Несмотря на то, что состояние просмотра хранит данные в хешированном формате [кодированный формат], изменить его с правильными значениями будет непросто, и это приведет к закалке в состоянии просмотра.

Вам нужно изменить Viewstate, вам нужно знать правильное кодирование и декодирование алгоритма.

Так что не пытайтесь изменить состояние просмотра.

Не могли бы вы сбросить значение в событии PostBack? такие как:

    mylabel.Text = "Привет";

Короткий ответ: вы можете.

Чтобы изменить состояние просмотра, вам необходимо:

  1. Десериализовать состояние просмотра
  2. Определите пару ключ / значение, связанную с вашим текстом метки (к этому времени это словарь Xml, содержащий пары ключ / значение)
  3. изменять
  4. Сериализация состояния просмотра

В этой статье более подробно рассматривается синтаксический анализ состояния просмотра. Он также включает ссылки на инструменты, которые можно использовать для анализа / декодирования View State: Понимание ASP.NET View State.

Другие вопросы по тегам