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

Catch all query parameters, model data, routes to action methods to prevent XSS attacks

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

我认为您需要一个 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

编码愉快!