Анализ состояния вида

Если вы просмотрите сгенерированный HTML-код для страницы ASP.NET, то обнаружите скрытое поле ввода с информацией о состоянии вида. В следующей примере демонстрируется страница, которая использует простой Web-элемент управления типа Label, динамически присваивая ему строку "Hello, world":

<html>
<head runat="server">
  <title>Hello World Page</title»
</head>
<form name="Form1" method="post" action="WebForm1.aspx" id="Form1">
  <div>
    <input type="hidden" nаmе="__VIEWSTATE" value="/wEPDwUKLTE2MjY5MTY1NQ9kFgICAw9kFgI
CAQ8PFgIeBFRleHQFDEhlbGxvIFdvcmxkIWRkZPsbiNOyNAufEt7OvNIbVYcGWHqf" />

  </div>
  <div>
    <input type="submit" name="Button1" value="Button" id="Button1" />
    <span id="lbl">Hello world!</span>
  </div>
</form>
</html>

Строка состояния вида не является читабельной— она просто выглядит как последовательность случайных символов. Тем не менее, пользователь может довольно легко интерпретировать эти данные. Ниже, показан фрагмент кода .NET, выполняющий эту работу и записывающий декодированную информацию на Web-страницу:

string viewStateString = "/wEPDwUKLTE2MjY5MTY1NQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFDEhlbG
 xvIFdvcmxkIWRkZPsbiNOyNAufEt7OvNIbVYcGWHqf";

// viewStateString содержит информацию состояния вида.
// Преобразует строку Base64 в обычный массив байт,
// представляющий ASCII-символы.

byte[] stringBytes = Convert.FromBase64String(viewStateString);

// Деcериализация и отображение строки.
string decodedViewState = System.Text.Encoding.ASCII.GetString(StringBytes);
lbl.Text = decodedViewState;

Ha Web-странице вы увидите приблизительно следующее:

? -162691655ddText Hello World!ddd????4 ?????U?Xz?

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

К счастью, имеется возможность, повышения безопасности состояния вида. Вы можете разрешить автоматическое хэширование, чтобы предотвратить вмешательство в состояние, и даже зашифровать состояние вида, тем самым предотвратив его декодирование. Эти технологии перемещают скрытые поля в более живучую и представительную часть инфраструктуры. Оба метода подробно рассматриваются в главе 6.

предыдущая    следующая страница   оглавление

111

Hosted by uCoz