Ошибка ScriptResource: меня взломали? - PullRequest
7 голосов
/ 01 июня 2009

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

Это всегда с разных IP-адресов

System.Web.HttpException: Invalid ViewState. в System.Web.UI.Page.DecryptStringWithIV (String s, IVType ivType) в System.Web.UI.Page.DecryptString (String s)

или

System.Security.Cryptography.CryptographicException: Заполнение недействительно и не может быть удален. в System.Security.Cryptography.RijndaelManagedTransform.DecryptData (байт [] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte [] & outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) в System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (байт [] inputBuffer, Int32 inputOffset, Int32 inputCount) в System.Security.Cryptography.CryptoStream.FlushFinalBlock () в System.Web.Configuration.MachineKeySection.EncryptOrDecryptData (Boolean fEncrypt, Byte [] buf, Byte [] модификатор, Начало Int32, длина Int32, IVType ivType, Boolean useValidationSymAlgo) в System.Web.UI.Page.DecryptStringWithIV (String s, IVType ivType) в System.Web.UI.Page.DecryptString (String s)

Они бывают на этой странице:

 ScriptResource.axd?d=VVe1O4rzLSI9hB5nRzBXZxUYTQz6ylDTL9djGR

Сайт пользователя Ajax и работает на .NET 3.

Этот кто-то пытается взломать сайт? Это ошибка с html на сайте?

Есть идеи?

1 Ответ

5 голосов
/ 01 июня 2009

Я полагаю, что эта ошибка вызвана тем, что ваш ViewState был расшифрован с использованием устаревшего ViewStateUserKey.

Устранение этих ошибок выполняется в два этапа:

  1. Убедитесь, что у вас есть ключ проверки для конкретного сайта. Вы можете использовать несколько онлайн-ресурсов для создания одного для вас, например this .
  2. Убедитесь, что ViewStateUserKey страницы всегда согласован. Из документации MSDN:

Установка свойства ViewStateUserKey может помочь вам предотвратить атаки на ваше приложение со стороны злонамеренных пользователей. Это достигается за счет того, что вы можете назначить идентификатор переменной состояния представления для отдельных пользователей, чтобы они не могли использовать переменную для генерации атаки. Можно установить для этого свойства любое строковое значение, например идентификатор сеанса пользователя или аутентифицированное имя пользователя.

Вы можете сделать это, установив его самостоятельно (возможно, в событии Init вашей страницы или базовой страницы):

if (Session["ViewStateUserKey"] == null)
{
    Session["ViewStateUserKey"] = new Guid().ToString();
}    
this.Page.ViewStateUserKey = Session["ViewStateUserKey"].ToString();

И нет, я не думаю, что вас взломали.

...