[英]Send response headers from ASP.NET Core v2.2 WebAPI application
[英]ASP.NET Core WebAPI Security Considerations
我的WebAPI就是我的UI使用的API后端。 事實上,我的UI將使用10個WebAPI服務。
我很難理解在安全性方面我需要考慮的事項。
我的API使用Bearer令牌進行保護,並且僅允許https。 我有CORS設置,他們只允許來源https://my-front.end
這一切都很好。
但是..如何防范C / XSRF並重放對WebAPI的攻擊? 我還需要嗎?
使用ASP.NET MVC項目設置反CSRF是相當輕松的,但是如何在WebAPI上實現它,從我的理解它依賴於將在服務器上生成的信息發送到客戶端以便在請求的主體並通過另一個渠道(例如cookie或標題)。 我讀到你可以通過使用隨機數(例如時間戳和隨機數)來防止重放攻擊 - 一些如何 - 但找不到任何實現示例。
還有什么我需要考慮的嗎?
編輯:前端使用vue.js,但我們有一個非常稱職的JS程序員,所以任何前端實現都不會有問題。 這只是一個找出需要做什么樣的事!
也值得注意的是,為了顯而易見,WebAPI和FrontEnd在不同的服務器上運行,因此這些都是有效的跨域調用。
好的。 首先,您需要在標頭中發送XSRF令牌。 為此,您需要轉到ConfigureServices方法並設置AntiForgery服務以期望此標頭。
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(x => x.HeaderName = "X-XSRF-TOKEN");
services.AddMvc();
}
接下來,您需要生成令牌。 由於前端和API是不同的服務,因此您需要在執行此操作時進行操作。 例如,您可以在登錄時執行此操作,或者您可以使用專用端點執行此操作,但最終結果是相同的。
您可以在標題或cookie中返回令牌值,這取決於您。 在我的例子中,我使用了Cookie,稍后我會解釋,但如果你願意,可以使用標題。
public class HomeController : Controller
{
private readonly IAntiforgery _antiForgeryService;
public HomeController(IAntiforgery antiForgeryService)
{
_antiForgeryService = antiForgeryService;
}
public IActionResult GetToken()
{
var token = _antiForgeryService.GetTokens(HttpContext).RequestToken;
HttpContext.Response.Cookies.Append("XSRF-TOKEN", token, new CookieOptions { HttpOnly = false });
return new StatusCodeResult(StatusCodes.Status200OK);
}
}
應該已經能夠使用IAntiforgery服務(它是您將在.net核心服務中使用的“AddMVC”調用的一部分)。
好的,現在我們返回了一個帶有令牌值的cookie。 現在我們只需要能夠將其發回。
這里有一些jQuery在做腿部工作
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/js-cookie/2.1.4/js.cookie.min.js"></script>
<script type="text/javascript">
var token = Cookies.get("XSRF-TOKEN");
$.ajax({
url: "/",
contentType: "application/json",
type: "POST",
headers: {
"X-XSRF-TOKEN": token
}
});
</script>
現在需要注意的是AngularJS會自動執行此操作。 當使用$ http時,它會查找名為“XSRF-TOKEN”的cookie,然后它會自動將其作為標題發送。 因為你正在使用Vue,所以你基本上都會這樣做,但更多的是手動過程。
同樣重要的是要注意,不要將其設置為期望將cookie作為CSRF令牌返回。 否則你無論如何都要擊敗CSRF的全部目標。
然后,您可以繼續使用AntiForgery屬性裝飾您的操作/控制器。
[AutoValidateAntiforgeryToken]
public class HomeController : Controller
{
總之,它基本歸結為:
主要來自這里: http : //dotnetcoretutorials.com/2017/05/18/csrf-tokens-angularjsjquery-asp-net-core/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.