首页 > 解决方案 > 使用 .NET Core API 获取请求的原始来源

问题描述

我知道这Request.Headers["Origin"]会获取请求的原始标头,但这可以通过手动设置标头在客户端进行更改。因此不是那么安全。

是否存在包含请求的原始、只读/不可更改来源的值?就像 CORS 正在使用的那个?

我需要这个值来检查请求是否正式来自它应该来自的站点。诀窍是我需要它在控制器方法中根据该值和仅用于该站点的键来搜索数据库中的对象。

CORS 的问题是它可以将 URL 列表列入白名单,但不能检查站点和密钥是否彼此属于,因此如果它模仿站点 2 的Request.Headers["Origin"]和密钥,白名单站点 1 可以访问白名单站点 2 的数据

标签: c#.net-core

解决方案


不幸的是(或者幸运的是?)没有可靠的方法可以从浏览器发送到您的服务器的数据中检查这一点。用户能够伪造您从浏览器收到的任何和所有信息。

这就是为什么需要可靠地确定用户来源的机制使用某种令牌机制、公共/私人签名、证书和类型来确定它的原因。不幸的是,这绝不像查找浏览器为您提供的一些信息那么简单,因此您可能需要依靠除源之外的其他东西来重新设计白名单机制,这可能涉及单点登录措施(如SAML) . 如果没有关于原产地检查旨在解决的潜在问题的更多信息,很难提供进一步的建议。


推荐阅读