Контроль моего глобального исключения регистрируется, эта ошибка, кажется, невозможна удалить то независимо от того, что я делаю, я думал, что наконец избавился от него, но это вернулось снова. Вы видите strack трассировку ошибки на подобном сообщении здесь.
Примечания о среде:
IIS 6.0.NET 3,5 единственных сервера SP1 приложение ASP.NET
Шаги уже сделаны:
В моей Базе Страницы для всех моих страниц
protected override void OnInit(EventArgs e)
{
const string viewStateKey = "big key value";
Page.ViewStateUserKey = viewStateKey;
}
Также в источнике страницы I видят, что все сгенерированные скрытые поля ASP.NET правильно в верхней части страницы.
Прежде всего, начнем с того, что эта ошибка состояния просмотра происходит на PostBack .
Также я должен сказать , что я сделал все, что каждый предлагает сделать, чтобы избежать этой проблемы. И у меня одна машина, но 2 пула, на которых работают одни и те же страницы.
Итак кто-то выполняет действие , эфир человека, эфир какой-то другой поисковой машины, "щелкая" по вашим страницам, или какой-то хакер пытается проверить вашу систему на наличие проблем ...
У меня есть подобные проблемы (редкие, но существующие), и я наконец обнаружил, что люди пытаются взломать мои страницы. (с того же IP-адреса, который у меня есть, и атаки dos)
Я модифицирую функцию LoadPageStateFromPersistenceMedium () , которая переводит состояние просмотра, и с помощью регистрации вижу, что именно было введено и с каких IP-адресов. ... затем я начал отслеживать эти результаты и видеть, что состояние просмотра было изменено вручную или было полностью пустым.
В случае ошибки я просто перенаправляю его на ту же страницу ...
Вот что я сделал ...
public abstract class BasePage : System.Web.UI.Page
{
protected override object LoadPageStateFromPersistenceMedium()
{
try
{
.. return the base, or make here your decompress, or what ever...
return base.LoadPageStateFromPersistenceMedium();
}
catch (Exception x)
{
string vsString = Request.Form[__VIEWSTATE];
string cThePage = Request.RawUrl;
...log the x.ToString() error...
...log the vsString...
...log the ip coming from...
...log the cThePage...
// check by your self for local errors
Debug.Fail("Fail to load view state ! Reason:" + x.ToString());
}
// if reach here, then have fail, so I reload the page - maybe here you
// can place somthing like ?rnd=RandomNumber&ErrorId=1 and show a message
Responce.Redirect(Request.RawUrl, true);
// the return is not used after the redirect
return string.Empty;
}
}
Теперь есть еще одна причина, почему это может произойти, и причина в том, что потому что кто-то щелкнет вашу страницу до загрузки __EVENTVALIDATION.
Это eventValidation размещается на последней кнопке - даже на найденном asp.net, и если у вас есть некоторые из них во многих местах на странице или рядом с кнопкой, то они идут в конец страницы.
Итак, даже если вы видите состояние просмотра вверху страницы, где же проверка ??? возможно, он никогда не загружался - страница повреждена?, слишком быстро пользователь нажимает на страницу?
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" ... >
Чтобы избежать такого рода проблем, я сделал простой javascript, который не позволял ему нажимать кнопку, пока этот вход не был загружен !!!.
Еще один комментарий, __EVENTVALIDATION не всегда присутствует! поэтому, возможно, безопаснее не искать это поле, если вы принимаете общее решение, а использовать трюк с javascript, чтобы просто проверить, загружена ли полная страница, или что-то еще, что вы думаете.
Вот мое окончательное решение с jQuery: (обратите внимание, что я проверяю на PageLoad, существует ли проверка событий!). Я поместил это на свои мастер-страницы.
<script language="javascript" type="text/javascript">
function AllowFormToRun()
{
var MyEventValidation = $("#__EVENTVALIDATION");
if(MyEventValidation.length == 0 || MyEventValidation.val() == ""){
alert("Please wait for the page to fully loaded.");
return false;
}
return true;
}
</script>
protected void Page_Load(object sender, EventArgs e)
{
// I do not know if Page can be null - just in case I place it.
if (Page != null && Page.EnableEventValidation)
{
Form.Attributes["onsubmit"] = "return AllowFormToRun();";
}
}
Вы можете протестировать, поставив рядом с кнопкой вашей страницы задержку.
<% System.Threading.Thread.Sleep(5000); %>
Сегодня я снова вижу в журнале это сообщение для WebResource и обнаружил, что бот получает страницы и переводит все символы в ссылках в нижний регистр , включая параметры, так что это была еще одна причина, по которой не удалось получить правильную закодированную строку и выдать сообщение типа Заполнение недопустимо и не может быть удалено.
Надеюсь, это поможет вам больше.
Вы уверены, что ваша проблема связана с криптографией, а не вызвана слишком большим ViewState? Если ViewState - проблема, вы можете разбить ее на части - измените значение pages / MaxPageStateFieldLength в web.config
Обзор веб-страниц, обнаруженных с несколькими ключевыми словами из сообщения об ошибке, показывает, что этот тип ошибки является относительно распространенным, обычно случайным (по крайней мере, по внешнему виду) и, к сожалению, редко включает явные обходной путь или объяснение ...
Существование множества похожих, но разных ситуаций, вероятно, связано с очень большим количеством различных архитектур и базовых конфигураций, которые могут каким-то образом привести к неспособности криптослоя утверждать подлинность MAC (коды аутентификации сообщений) на страницах запроса:
Один относительно частым «маркером» этих отчетов об ошибках является упоминание запросов ресурсов (например, WebResource.axd ).
Обратите внимание, что такие запросы часто не регистрируются (чтобы не увеличивать размер файлов журнала из-за относительно небольшого интереса). Это отсутствие в файле журнала и тот факт, что они часто кэшируются (и, следовательно, относительно случайное и нечастое появление ошибки) может объяснить, как это возможное происхождение ошибки остается «незамеченным». Это также говорит о том, что при попытке воссоздать ошибку (при отслеживании в журналах, в реальном времени и т. Д.) Может быть полезно предотвратить кеширование веб-браузера (или, по крайней мере, сначала очистить его кеш).
Вкратце, вот несколько идей и вещей, на которые следует обратить внимание:
Надеюсь, это поможет; -)
{{1} }