使用WCAT负载测试解决ValidateAntiForgeryTokenAttribute()问题

时间:2013-09-02 11:11:03

标签: asp.net asp.net-mvc testing wcat

我正在使用WCAT对ASP.NET MVC应用程序执行负载测试。因为这个应用程序使用防伪令牌安全验证,我想知道是否有可能在WCAT脚本值中生成动态postdata值,以便每次获得防伪cookie值时注入有效令牌。

有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我确信它可以完成,但我不知道如何编写一个能够生成有效防伪令牌的WCAT交易。

相反,我所做的是实现一个条件过滤器,它将ValidateAntiForgeryTokenAttribute()应用于我的所有POST操作。一旦你有了条件过滤器,你就可以添加一个AppSettings值,它允许你打开/关闭属性。即,当您进行负载测试时,请将其关闭。

您可以了解如何实施条件过滤器here

在我的项目中,我在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);
}

我的web.config中有一个这样的AppSetting:

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

注意:除了禁用防伪标记之外,您还需要在web.config中将requestValidation模式设置为2.0,如下所示(reference):

<httpRuntime requestValidationMode="2.0">

一旦你掌握了这些东西,再次运行你的WCAT脚本,你应该是金色的。