捕获所有查询参数、模型数据、动作方法的路由以防止 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
编码愉快!
我想捕获用户输入的所有参数、路由信息和其他表单数据,因此我可以对其进行编码以防止对我的网站进行 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
编码愉快!