如果从跨域客户端调用CSRF攻击,如何保护Web API?
问题描述:
我有一个Web API,并通过角度开发的跨域客户端应用程序调用。我如何保护我的Web API免受CSRF攻击。如果从跨域客户端调用CSRF攻击,如何保护Web API?
我使用基于令牌认证
我通过下面的文章就由麦克·沃森 https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks
但在上述情况下也客户端和web API在同一个域中,如果它在不同的域中运行, 我们如何传递AntiForgeryToken?
答
如何创建一个端点,您可以在应用程序开始获取令牌时进行查询?然后将它们与角度应用程序的每个未来请求一起发送。
public class AntiForgeryController : ApiController
{
[HttpGet]
public IHttpActionResult Get()
{
string cookieToken;
string formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return Ok(new {cookieToken, formToken});
}
}
攻击者也会知道关于这个调用,然后他可以简单地调用并传递这个值与请求权一起吗? – niknowj
当然,这是可能的。您将不得不使这个端点需要某种类型的身份验证。 – peco