好吧,问题说明了一切,我想知道,这样的比较有多安全:
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)?
最佳答案
最好的解决方案是使用安全密码。
只要您的检查只允许正确的密码,您就不必担心伪造的 IP 地址或其他可能的不安全检查。
if ($_GET['password'] === 'my_password') {
// code
}
考虑使用secure compare function以避免定时攻击。
关于php - 假设如果 $_SERVER ['SERVER_ADDR' ] === $_SERVER ['REMOTE_ADDR' ] 是服务器发出请求,那么安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256189/