捕获所有查询参数,模型数据,操作方法的路由,以防止XSS攻击

时间:2018-10-25 07:16:09

标签: asp.net .net asp.net-mvc asp.net-web-api2 xss

我当时想捕获用户输入的所有参数,路线信息和其他表单数据,因此我可以对其进行编码,以防止对我的网站进行XSS攻击。我想全局执行此操作,而不是针对某个特定控制器。如何在WEB API 2.0 .net中做到这一点?

1 个答案:

答案 0 :(得分:2)

我认为您需要一个DelegatingHandler来满足您的需求。 每个请求都首先通过处理程序,您可以在其中拦截它们:

public class RequestHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        //Validate the uri and or encode it
        Console.WriteLine(request.RequestUri);

        //Validate the content
        Console.WriteLine(request.Content.ReadAsStringAsync().Result);

        // If you like, create a whole new request or cancel it.
        return base.SendAsync(request, cancellationToken);
    }
}

您可以全局注册:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {            
        config.MessageHandlers.Add(new RequestHandler());

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

作为进一步参考,请参见网络api海报:https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf

编码愉快!