通过纯前端(如微信/百度/支付宝等小程序)的方式调用接口,无论怎么混淆加密代码,都将不可避免的会暴露接口密钥apikey,导致你的接口被第三方盗用。本功能是通过限制Referer来源的方式在一定程度上拦截第三方请求。
Referer解释:
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
这里以微信小程序为例:在天行数据控制台 – 接口管理 – 接口请求日志 – INFO一栏中可以看到请求接口的Referer来源信息
通过微信小程序发起网络请求时,默认都会带上固定的Referer信息(如:https://servicewechat.com/{appid}/{version}/page-frame.html) 其中{appid}是你的微信小程序ID、{version} 是小程序的版本号,为 0 表示为开发版、体验版以及审核版本,为 devtools 表示为开发者工具,其余为正式版本。 在控制台 – 接口管理 – 防盗用设置中填入微信小程序的Referer:
即可一定程度上拦截除了自己的微信小程序外,其他第三方的恶意请求(返回170错误)。如上图所示,只允许在输入框中的三个来源URL下访问。 需要注意的是:一旦你设置了Referer白名单限制,后端调用时,会因为没有携带Referer信息同样会返回170错误,此时,你要么删除Referer白名单限制,要么在你的后端请求中,带上Referer信息。 另外,即使设置了Referer白名单限制,如果被第三方猜出了你的Referer白名单所包含的来源链接,对方也可以通过后台代理的方式绕过Referer限制,因此,你需要尽可能的隐藏好你的Referer白名单信息和接口密钥apikey。
除了Referer白名单限制外,你还可以通过接口管理 – IP白名单设置的方式,限制非白名单内的IP地址请求你的接口,系统将返回120错误。
Referer白名单适合在前端调用接口时,限制只允许在某个页面或者某个小程序下调用接口。IP白名单适合限制后端调用接口时,只允许自己的服务器IP调用接口。通过灵活运用以上两种白名单,可以最大程度上保护你的接口请求次数不被恶意消耗。