通过纯前端的方式调用接口,无论怎么混淆加密代码,都将不可避免的会暴露接口密钥apikey,导致你的接口被第三方盗用。本功能是通过限制Referer来源的方式在一定程度上拦截第三方请求。
Referer解释:
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
这里以微信小程序为例:
通过微信小程序发起网络请求时,默认都会带上固定的Referer信息(如:https://servicewechat.com/{appid}/{version}/page-frame.html)
其中{appid}是你的微信小程序ID、{version} 是小程序的版本号,为 0 表示为开发版、体验版以及审核版本,为 devtools 表示为开发者工具,其余为正式版本。
在控制台 - 安全管理 - 防盗用设置中填入微信小程序的Referer:
即可一定程度上拦截除了自己的微信小程外,其他第三方的恶意请求(返回170错误)。
如果只输入https://www.tianapi.com/demo/robot/,则表示接口只能在https://www.tianapi.com/demo/robot/网页下才能被正常调用。你还可以使用通配符模式,例如https://www.tianapi.com/*,表示在https://www.tianapi.com/域名下任何网页皆可访问。同理,如只需要微信小程序调用接口,则可以设置https://servicewechat.com/*,只需要自己的某个小程序调用接口,则可以设置https://servicewechat.com/{appid}*
需要注意的是:
一旦你设置了Referer白名单限制,后端调用时,会因为没有携带Referer信息同样会返回170错误,此时,你要么删除Referer白名单限制,要么在你的后端语言中,带上Referer信息。
另外,即使设置了Referer白名单限制,如果被第三方猜出了你的Referer白名单所包含的来源链接,对方也可以通过后台代理的方式绕过Referer限制,因此,你需要尽可能的隐藏好你的Referer白名单信息和接口密钥apikey。