Php 使用HTTP\U referer和IP地址验证referer站点

Php 使用HTTP\U referer和IP地址验证referer站点,php,http,http-headers,Php,Http,Http Headers,我有一个web服务(返回数据),只有少数“白名单”远程服务器可以访问。因此,当远程服务器向我的服务器发送请求时,我会在$\u server['HTTP\u REFERER']字段中检查白名单上的域名和相应的IP地址(我的web服务通过全局数组知道)。是否可以绕过这种白名单请求方法? 我知道实施referer欺骗很容易……但请记住,我正在检查referer和相应的IP地址,这两个地址都是我的应用程序肯定知道的 如果这不是一件安全的事情,那么是否有人有其他方法只允许“白名单”域访问给定的web服务

我有一个web服务(返回数据),只有少数“白名单”远程服务器可以访问。因此,当远程服务器向我的服务器发送请求时,我会在
$\u server['HTTP\u REFERER']
字段中检查白名单上的域名和相应的IP地址(我的web服务通过全局数组知道)。是否可以绕过这种白名单请求方法? 我知道实施referer欺骗很容易……但请记住,我正在检查referer和相应的IP地址,这两个地址都是我的应用程序肯定知道的


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

我认为,除了原始IP地址之外,检查
Referer
HTTP头不会产生任何安全好处。话虽如此,基于IP的身份验证本身并不是最佳选择。如果您真的想保护您的API,最好研究一下SSL和某种形式的。

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


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

为了清楚起见:您正在将请求客户端的远程ip与引用主机的ip进行比较?您正在检查什么的ip?您得到的是referer HTTP头,其中只有域名,很容易被欺骗,并且您知道访问客户端的IP地址。它们不是一回事。我想我把读者弄糊涂了。“客户机”实际上是一个远程服务器,它有一个与其关联的域名和一个IP地址。我的网页实际上是一个向调用者返回数据的web服务……我应该说得更清楚:)我已经编辑了上面的问题以将其纳入其中。请参见。因此,如果远程服务器正在发出请求,我怀疑这是通过发送HTTP请求的自动工具发生的,而不是通过某人单击浏览器中的链接。然后我不确定为什么会设置referer头。