- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的 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
{
总而言之,它基本上可以归结为:
主要取自此处:http://dotnetcoretutorials.com/2017/05/18/csrf-tokens-angularjsjquery-asp-net-core/
关于javascript - ASP.NET Core WebAPI 安全注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44032672/
我想为我的 ABP 项目中的特定应用程序服务关闭自动 WebAPI 生成服务。 最佳答案 RemoteService 属性可用于将类标记为远程服务或禁用固有地实现 IRemoteService 接口(
我无法从 postman 访问 webapi 错误是下一个: 如您所见,没有授权。 valuescontroller.cs 是: namespace CVService.Controllers {
我无法从 postman 访问 webapi 错误是下一个: 如您所见,没有授权。 valuescontroller.cs 是: namespace CVService.Controllers {
我有以下 Controller ,它应该接受用户名和密码作为 POST 中的有效负载。如果我将其更改为 HttpGet 就可以了。 [RoutePrefix("api")] public class
使用以下路线: routes.MapHttpRoute( name: "Set", routeTemplate: "api/set/{id}",
我正在使用 AngularJS,我正在尝试将 json 从我的服务发送到 webAPI Controller 。当我通过发送时,我在 webApi 函数的参数中收到 null。 我的功能服务是: an
据我了解,如果我有一个 ASP.NET WebApi 方法,其签名如下所示...... public HttpResponseMessage PostCustomer(Customer custome
我遇到了一个解决方案问题,我使用 Visual Studio SPA 模板中的部分在具有 Oauth 身份验证的 WebApi 中拥有帐户 Controller 。 app.UseOAuthBea
我按照此处的说明将 webApi.HelpPage 区域和 View 添加到使用 structureMap 的现有项目中 - 但是在访问/Help url 时: StructureMap Except
我有一个 WebAPI。如何返回并打开网页。例如,我想打开 CNN.com 页面。 [HttpGet] public HttpResponseMessage Get()
我想知道是否有人可以澄清这一点。我发现用法令人困惑。 链接和视频都没有回答我的问题 我知道像这样的链接 asp.net core middleware vs filters 甚至还有关于它的视频 但是
运行以下最新版本(在撰写本文时): Visual Studio 2019 16.4.5 .NET 核心 SDK 3.1.102 x64 测试的浏览器: 谷歌浏览器 80.0.3987.122 火狐 7
想法是,将有一个外部实体 (SharePoint) 调用我的 WebAPI 并传入 PDF 文件以及有关该 PDF 文件的一些额外元数据信息。我被困在如何构造 Web API 方法的签名上。这是我到目
我有一个 WebApi 服务处理来自简单表单的上传,如下所示: 但是,我不知道如何使用 HttpClient API 模拟同一
嗨,我是 Angular 的新手,现在我从一个示例登录页面开始,该页面传递包含用户名和密码的 userEntity。userEntity 是一个对象/实体是 webapi。 问题:当我为登录按钮单击
我有一个 AngularJS + MVC + WebAPI,我正在尝试:- 使用标准(个人账户)进行MVC认证;- 使用相同的用户和密码进行基于 WebAPI 的身份验证。 问题,AngularJS
Web API 的版本存在一些混淆。看看这个 Web API at NuGet , Microsoft ASP.NET Web API 2.2 5.2.3 什么?这里是没有提到 2.2 的描述 我的猜
我正在开发一个 Web 应用程序,该应用程序将 Owin 托管用于 MVC 和 WebApi 2。 我最近将 Microsoft Mvc/WebApi 包从 5.2.2 版升级到 5.2.3 版,将
随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数。全栈工程师的压力越来越大。 现在的前端的框架,既可以做各种Web,又可以做各种APP,前端框架更新换代越来越快,越来越多。 传统的模
1. WebAPI 背景知识 1.1 什么是 WebAPI JS 分成三个大的部分: ECMAScript: 基础语法部分 DOM API: 操作页面结构 BOM API: 操作浏览器 WebAPI
我是一名优秀的程序员,十分优秀!