Скрытое поле ввода вызывает потенциально опасную ошибку значения Request.Form - PullRequest
1 голос
/ 09 ноября 2008

В моем приложении ASP.NET 1.1 я сжимаю и заменяю скрытую переменную Viewstate альтернативным сжатым значением, хранящимся в скрытом поле с именем __VSTATE. Это работает хорошо, но в некоторых случаях отправка страницы вызывает общую ошибку «потенциально опасное значение Request.Form ...».

Я проверил значение __VSTATE, и ничто не кажется потенциально опасным. Мне удалось воспроизвести ошибку с полностью урезанной версией страницы и значением __VSTATE, как показано ниже. Нажатие на кнопку отправки вызывает ошибку. Страница работает нормально, если я изменю значение на "".

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="Dangerous.aspx.vb" Inherits="Dynalabs.Dangerous" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <body MS_POSITIONING="FlowLayout">

    <form id="Form1" method="post" runat="server">
      <input type="hidden" id="__VSTATE" runat="server" value="Onw=" />
      <asp:Button ID="btnSubmit" Runat="server" Text="Submit" />
    </form>

  </body>
</html>

Изменение имени поля на «MyHiddenWT» не имеет значения. Удаление runat = "server" действительно остановило ошибку, но это просто означает, что .NET проверяет только элементы управления на стороне сервера. Я также попробовал некоторые дополнительные значения и нашел следующее:

"Anw=", "Bnw=", "Cnw=", ... "Nnw=", "Onw=", "Pnw=", ... "Znw=", 

«Onw =» является единственным, который вызывает проблему. Считается ли капитальный О восьмеричным?

Может кто-нибудь объяснить, почему это значение вызывает сообщение об ошибке? Я также ищу решение, но, пожалуйста, не говорите мне, чтобы удалить проверку страницы. Это то же самое, что сказать, что автомобиль с плохими тормозами можно починить, если он не ведет машину.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 ноября 2008

Мое первое предположение состоит в том, что это выглядит как объявление события OnSomething = "javascript.

Немного странно, что только заглавная буква O вызывает ошибку. Вы также проверяли строчную букву o?

Можете ли вы попробовать это: "OnClick =", "abc OnClick =", "onclick =", "abc onclick =", "anw =", "bnw =", ...


Если JavaScript «OnSomething = x» является проблемой, то просто добавьте еще один символ к вашим значениям. Может быть, простой 'v' подойдет.

<input type="hidden" id="__VSTATE" runat="server" value="vOnw=" />

А затем при отправке вы удаляете лишний символ перед декодированием.

Или еще лучше, обновите до 2.0.

0 голосов
/ 10 ноября 2008

У вас есть суть причины. Вот лучшая ссылка в ответе, который я получил с другого сайта:

http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet.security/browse_thread/thread/d91d89511401e979

...