【发布时间】:2013-06-19 19:42:52
【问题描述】:
嗯,这个问题说明了一切,我想知道,这样的比较有多安全:
if ($_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']) {
// yeah, it's the server, go ahead do this.
}
我问的原因是识别来自服务器本身的一些 web api 调用。
我知道$_SERVER['REMOTE_ADDR'] 可以被欺骗来运行请求,但不能从中获取结果。如果是这种情况,例如在讨论 Rest 时,例如 GET 请求不会出现问题,但 DELETE 请求呢,不需要解析来自服务器的响应。
如果上述说法正确,是否意味着您不应该相信后面的比较?
有哪些替代方案(让我们从这里排除 CLI)?
【问题讨论】:
-
使用某种密码怎么样?
-
可以安全地假设如果
$_SERVER['REMOTE_ADDR']是127.0.0.1或$_SERVER['SERVER_ADDR'],则请求来自服务器本身,但如果您不是服务器中唯一运行脚本的人或服务器正在运行像 Squid 这样的代理服务,你可能会遇到麻烦。正如 TimWolla 建议的那样,在某些身份验证层中更多地依赖应该是合适的。 -
-- TimWolla 是的,你说得有道理,检查密码也会更聪明。 -- Havenard - 好的,但是攻击者不能将它的 ip 欺骗为 127.0.0.1 因此它会欺骗机制吗?
-
您不能使用欺骗性 IP 来稳定 TCP 会话或与任何服务器的任何双向通信。您不必在这里担心。
-
@Havenard - 好的,感谢您清除它:)
标签: php security ip-address