簡體   English   中英

ASP.NET核心WebAPI安全注意事項

[英]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
{

總之,它基本歸結為:

  • 設置.net核心AntiForgery期望標頭值用於CSRF令牌
  • 有一個端點,它將手動生成一個令牌供您使用,並將其作為cookie /頭返回
  • 讓您的前端讀取此值並將其存儲以用於后續請求
  • 在后續請求中將標記值作為標頭發送(不是cookie)

主要來自這里: http//dotnetcoretutorials.com/2017/05/18/csrf-tokens-angularjsjquery-asp-net-core/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM