gpt4 book ai didi

c# - 将 .NET Web API 发布限制为同源

转载 作者:行者123 更新时间:2023-11-30 22:07:27 25 4
gpt4 key购买 nike

我正在使用 VS 2013 .NET Web API 2。

我知道使用 .ajax 调用您必须启用跨源 (CORS),但是,我将如何限制服务器端 POST 请求。

如果我有一个名为 /api/images 的端点,它接受以 Base64String 形式发布的图像,我如何确保某人无法提交 POST 从原始域 (example.com) 以外的任何地方到该终点。

现在我检查 Request.Headers.Host,如果那不是原始域,我将返回 403 禁止响应。

var origin = Request.Headers.Host;
if (origin != "example.com"
return ForbiddenResponse;

我想这很容易伪造。除了实现一种形式的 oAuth 之外,还有其他方法可以做到这一点吗?一些简单的东西,比如需要来回传递的 API key (或者是否可以通过 Fiddler 读取)?

我要解决的问题是有一个 flash 对象将图像发送到 api 端点。我显然不希望任何其他人能够将图像发送到该端点。

最佳答案

目前您可以使用对 ASP.NET Web API 2 的 CORS 支持

https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable-cors

文章摘录------

启用 CORS

现在让我们在 WebService 应用程序中启用 CORS。首先,添加 CORS NuGet 包。在 Visual Studio 中,从“工具”菜单中选择“库包管理器”,然后选择“包管理器控制台”。在包管理器控制台窗口中,键入以下命令:

安装包 Microsoft.AspNet.WebApi.Cors

此命令安装最新的包并更新所有依赖项,包括核心 Web API 库。使用 -Version 标志来定位特定版本。 CORS 包需要 Web API 2.0 或更高版本。

打开文件 App_Start/WebApiConfig.cs。将以下代码添加到 WebApiConfig.Register 方法。

using System.Web.Http;
namespace WebService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// New code
config.EnableCors();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}

接下来,将 [EnableCors] 属性添加到 TestController 类:

using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Cors;
namespace WebService.Controllers
{
[EnableCors(origins: "http://mywebclient.azurewebsites.net", headers: "*", methods: "*")]
public class TestController : ApiController
{
// Controller methods not shown...
}
}

关于c# - 将 .NET Web API 发布限制为同源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23002882/

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