使用HTTP_referer和IP地址对referer站点进行身份验证


Authenticating referer site using HTTP_REFERER and IP address

我有一个web服务(返回数据),只有少数"白名单"远程服务器才能访问。因此,当远程服务器向我的服务器发送请求时,我会在$_SERVER['HTTP_REFERER']字段中检查白名单域名和相应的IP地址(我的web服务通过全局阵列知道该地址)。这种白名单请求的方法可以绕过吗?我知道实现裁判欺骗很容易。。。。但请记住,我正在检查refer和相应的IP地址,这两个地址对我的应用程序来说都是已知的。

如果这不是一件安全的事情,有人有其他方法只允许"白名单"域访问给定的web服务吗?

如前所述,我不确定为什么在您的场景中首先会设置HTTP Referer标头,但我们假设它是,并且它的域对应于客户端的IP。Referer标头是客户端发送的任意值,它被简单地欺骗了。客户端的IP OTOH是不可伪造的(不包括复杂的网络级攻击,这些攻击要求攻击者基本上已经损害了一方或另一方)。你要问的是,使用一个不安全、无意义的值来确认一个已经尽可能安全的值是否有意义。答案是否定的。只要坚持IP过滤器,这已经足够好了。

如果您想进一步加强身份验证,请使用正确的身份验证方案,在该方案中,您可以与客户端共享机密(用户名/密码、API令牌、Oauth或类似内容)。

我认为除了检查原始IP地址之外,还检查Referer HTTP标头根本不会带来任何安全优势。话虽如此,基于IP的身份验证本身并不是最安全的做法。如果您真的想保护您的API,最好研究SSL和某种形式的HTTP身份验证。