2013-06-01 2 views
3

Просто посмотрите, сможет ли кто-нибудь объяснить это дальше.ASP.NET Viewstate - поиск разъяснений о статье поддержки

В support article 829743 на microsoft.com, они говорят:

Если включить состояние представления MAC отличать от, а затем для управления, которые не HTML кодирования (например, контроль этикеток используют состояние представления), злоумышленники могут вмешиваться в данные состояния представления и могут помещать произвольные данные в состояние просмотра. Эти произвольные данные декодируются, а затем используются элементами управления, когда они отображают опубликованную страницу. В результате злоумышленники могут вставлять скрипт в приложение, если вы не работаете, чтобы предотвратить атаку. Например, злоумышленник может декодировать данные, вставлять скрипт в данные, где находится элемент управления Label, а затем ссылаться на него с веб-сайта. Любой, кто нажимает на ссылку, станет жертвой атаки с использованием сценария, которая может потенциально украсть их файлы cookie для проверки подлинности или идентификатор сеанса. Сценарий также может позволить злоумышленнику изменить данные состояния для элементов управления, которые используют состояние просмотра, и в результате могут произойти атаки конкретного приложения.

Это не имеет для меня никакого смысла. Почему элемент управления меткой или любой другой статический элемент управления, который никогда не изменяется и не взаимодействует с данными запроса HTTP, нуждается в представлении? Я думал, что только элементы управления формой будут использовать viewstate. Есть что-то, что мне не хватает? Если элемент управления меткой использует viewstate, то это перепутано, ИМХО. Просто ищите разъяснения, если кто-то может пролить свет. Может быть, это не слишком поздно, или у меня еще не было пива. Спасибо!

ответ

0

Почему элемент управления меткой или любой другой статический элемент управления, который никогда не изменяет и не взаимодействует с данными запроса HTTP, нужен viewstate?

Прежде всего ViewState имеют буквальный, этикетки и другие элементы управления и использовать его по умолчанию, если не отключить его, который управляет использованием EnableViewState="false".

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

<asp:Literal runat="server" EnableViewState="true" ID="txtLiterar"> 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     txtLiterar.Text = "Time of start editing:" + DateTime.Now.ToString(); 
    } 
} 

После того, как сообщение назад, элемент управления сохранит начальное значение кулака.

Почему EnableViewState включен по умолчанию, ну, вы можете видеть элементы управления как переменные, которые вы устанавливаете для своих данных по коду, и вам нужно иметь его снова после обратной передачи. Или зачем использовать элементы управления? введите его прямо на страницу.

С другой стороны, если вы понимаете, что вы делаете, и как они работают, вы можете отключить видоискатель на большинстве из них - и снова установите их на столбе.

In this answer I have write еще немного о ViewState и где требуется больше всего: How I can deactivate ViewState without Control problems

Теперь давайте вернемся к реальной проблеме, безопасности.
Если вы отключите проверку состояния просмотра, теперь текст, который используется для Literal, также сохраняется в представлении.

Любой может прочитать и изменить его (если вы не обеспечили его) и позволяет говорить о том, что изменить текст

"Time of start editing", чтобы "<script>alert("hello there");</script>", теперь на первый пост обратно Буквальное сделает сценарий и вот о чем вы предупреждаете.

+0

Спасибо, Дэвид! Эта перспектива помогает очистить его! Я склонен сосредоточиться на обслуживании HTTP-запросов в моих веб-приложениях и меньше на (что я считаю наворотом) вложениях и недостатках .NET. Следовательно, мое замешательство. Раньше я не думал об этом как о векторе атаки, не глядя на то, как элемент управления получает свое значение с точки зрения .NET. Thx снова! – Scott

+0

@Scott Посмотрите на текст над значками, Аристос отвечает, Дэвид исправляет ошибку небольшого типа. – Aristos