请考虑以下情况:
我有一个与 IIS 在同一台服务器上运行的 API。IIS 正在托管一个网页。我只想允许访问此网页的 API。域内没有其他页面。
假设域是example.com,网页是example.com/page 这些都不应该工作,example.com,example.com/other。只有 example.com/page 应该有权访问。
作为奖励,我想知道我是否可以阻止对 API 的直接访问。所以我想禁止去 URL 栏并使用 API 地址进行获取请求。
请考虑以下情况:
我有一个与 IIS 在同一台服务器上运行的 API。IIS 正在托管一个网页。我只想允许访问此网页的 API。域内没有其他页面。
假设域是example.com,网页是example.com/page 这些都不应该工作,example.com,example.com/other。只有 example.com/page 应该有权访问。
作为奖励,我想知道我是否可以阻止对 API 的直接访问。所以我想禁止去 URL 栏并使用 API 地址进行获取请求。
您所描述的最好实现为 api 端的 HTTP Referer [原文如此] 白名单。Http Referer 标头描述了引用站点,默认情况下浏览器会对其进行广告 - 但请注意标头是客户端提供的,因此虽然这将阻止天真的 Web 用户从不同站点访问您的 API,但如果用户自己有动机从站点访问 api,他们可以轻松地伪造一个 http Referer 标头。
保护 API 免受非法使用的唯一真正方法是向 API 服务器提供身份验证和授权。即便如此,任何授权 cna 的人都会在带有伪造 http 标头的 api 调用中提供相同的凭据。因此,归根结底,您无法真正阻止有动力的一方在不使用该站点的情况下访问 api。不过,今天的网站通常不会担心这一点——他们专注于确保使用 CORS 来防止对不知情用户的跨站点脚本攻击,并专注于身份验证和授权来阻止不良行为者,他们只会伪造客户提供的任何东西。
将某些推荐人列入白名单应该可以做到这一点。直接输入 URL 的链接不提供引用者,因此与您的白名单不匹配。您并没有真正阻止对 api 的访问,该 api 需要可以从您网站的合法用户的任意 IP 访问,但您正在通过检查引荐来源并拒绝不符合您的白名单的请求来进行简单的授权检查。