Обход ValidateAntiForgeryTokenAttribute() с нагрузочным тестированием WCAT

Я использую WCAT для выполнения нагрузочного теста в приложении ASP.NET MVC. Поскольку это приложение использует проверку безопасности токена защиты от подделки, мне интересно, возможно ли динамически генерировать значения postdata в значениях сценария WCAT, чтобы вводить действительный токен каждый раз, когда я получаю значение cookie против подделки.

Есть идеи? заранее спасибо.

1 ответ

Я уверен, что это может быть сделано, но я не знаю, как создать сценарий транзакции WCAT, которая выдаст действительный токен против подделки.

Вместо этого я применил условный фильтр, который применяет ValidateAntiForgeryTokenAttribute() ко всем моим действиям POST. Когда у вас есть условный фильтр, вы можете добавить значение AppSettings, которое позволяет вам включать / выключать атрибут. т.е. когда вы тестируете нагрузку, вы выключаете его.

Вы можете узнать, как реализовать условный фильтр здесь.

В моем проекте я включаю и отключаю условный фильтр в Global.asax.cs Application_Start() следующим образом:

bool useAntiForgeryToken = string.Compare(ConfigurationManager.AppSettings["useAntiForgeryToken"], "true", StringComparison.InvariantCultureIgnoreCase) == 0;
if (useAntiForgeryToken) {

    // Ensure that all POST actions are automatically decorated with the ValidateAntiForgeryTokenAttribute.
    IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions =
        new Func<ControllerContext, ActionDescriptor, object>[] {
        (controllerContext, actionDescriptor) =>
            string.Equals(controllerContext.HttpContext.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase ) ? new ValidateAntiForgeryTokenAttribute() : null
    };

    // Create the conditional filter using the condition we defined
    var provider = new ConditionalFilterProvider(conditions);

    // And add the conditional filter
    FilterProviders.Providers.Add(provider);
}

И у меня есть такой AppSetting в моем web.config:

<appSettings>
    <add key="useAntiForgeryToken" value="true">
</appSettings>

Примечание: в дополнение к отключению токена защиты от подделки вам также необходимо установить для режима requestValidation значение 2.0 в вашем файле web.config, например так ( ссылка):

<httpRuntime requestValidationMode="2.0">

Как только вы это сделаете, снова запустите ваши сценарии WCAT, и вы должны быть в восторге.

Другие вопросы по тегам