gpt4 book ai didi

javascript - ASP.NET Core WebAPI 安全注意事项

转载 作者:可可西里 更新时间:2023-11-01 02:40:53 24 4
gpt4 key购买 nike

我的 WebAPI 就是供我的 UI 使用的 API 后端。事实上,我的 UI 可能会使用 10 种 WebAPI 服务。

我很难理解在安全方面我需要考虑什么。

我的 API 使用不记名 token 进行保护,并且仅允许 https。我设置了 CORS,它们只允许来源 https://my-front.end 这一切都很好。

但是.. 我如何防止对 WebAPI 的 C/XSRF 和重放攻击?我什至需要这样做吗?

在 ASP.NET MVC 项目中设置反 CSRF 相当轻松,但是你怎么能在 WebAPI 项目上做到这一点,据我所知,它依赖于发送信息,在服务器上生成,到客户端发送沿着请求的主体并通过另一个 channel (例如 cookie 或 header )。我读到您可以通过使用随机数(例如时间戳和随机数)来防止重放攻击——有些方法——但找不到任何实现示例。

还有什么我需要考虑的吗?


编辑:前端使用vue.js,但我们有一个非常称职的JS程序员,所以任何前端实现都不会成为问题。这只是找出需要做什么的问题!

可能还值得注意,为了显而易见,WebAPI 和 FrontEnd 运行在不同的服务器上,因此这些实际上都是跨源调用。

最佳答案

好的。首先,您需要在 header 中发送 XSRF token 。为此,您需要转到 ConfigureServices 方法并设置 AntiForgery 服务以期待此 header 。

public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(x => x.HeaderName = "X-XSRF-TOKEN");
services.AddMvc();
}

接下来您需要生成 token 。因为前端和API是不同的服务,所以做这个的时候需要算出来。例如,您可以在登录时执行此操作,或者您可以使用专用端点执行此操作,但最终结果是相同的。

您可以在 header 或 cookie 中返回 token 值,这取决于您。在我的示例中,我使用了一个 Cookie,我将在稍后解释,但如果您愿意,也可以使用 header 。

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,然后自动将其作为 header 发送。因为您使用的是 Vue,所以您基本上无论如何都会这样做,但更多的是手动过程。

同样重要的是要注意,不要将其设置为期望 cookie 返回为 CSRF token 。否则你已经打败了 CSRF 的全部目的。

然后您可以继续使用 AntiForgery 属性装饰您的操作/ Controller 。

[AutoValidateAntiforgeryToken]
public class HomeController : Controller
{

总而言之,它基本上可以归结为:

  • 设置 .net Core AntiForgery 以期望用于 CSRF token 的 header 值
  • 有一个端点可以手动生成一个 token 供您使用并将其作为 cookie/ header 返回
  • 让您的前端读取此值并将其存储以供后续请求使用
  • 在后续请求中将 token 值作为 header 发送(不是 cookie)

主要取自此处:http://dotnetcoretutorials.com/2017/05/18/csrf-tokens-angularjsjquery-asp-net-core/

关于javascript - ASP.NET Core WebAPI 安全注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44032672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com