신뢰해도 안전한가?$_SERVER['REMOTE_ADDR']
요청 헤더 변경 등으로 대체할 수 있습니까?
그런 걸 써도 안전할까요?
if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
$grant_all_admin_rights = true; }
질문에 대한 답변
네, 안전합니다.TCP 접속의 송신원IP이며, HTTP 헤더를 변경하는 것으로 대체할 수 없습니다.
주의해야 할 1가지 케이스는 리버스 프록시의 배후에 있는 경우입니다.이 경우 REMOTE_ADDR은 항상 프록시 서버의 IP이며 사용자 IP는 HTTP 헤더(X-Forwarded-For 등)로 제공됩니다.그러나 일반 사용 사례의 경우 REMOTE_ADDR을 읽어도 됩니다.
$_SERVER['REMOTE_ADDR']
는, TCP 접속의 IP 주소입니다.(BGP 경유로 부정 루트를 방송하는 것에 의해서) 인터넷상에서 쌍방향으로 IP 주소를 스푸핑 하는 것은 기술적으로는 가능하지만, 그러한 공격은 검출되어 일반적인 공격자가 이용할 수 없는 경우가 있습니다.기본적으로 공격자는 ISP 또는 통신 사업자를 제어할 수 있어야 합니다.TCP에 대한 실현 가능한 단방향 스푸핑 공격은 아직 없습니다.단, LAN에서는 쌍방향 IP 스푸핑은 사소한 것입니다.
또, IPv4 가 아니고 IPv6 주소인 경우도 있습니다.그 점에서는 당신의 현재 수표는 괜찮지만, 만약 당신이 그것을 확인해 준다면1.2.3.4
내부에서만 발생하다$_SERVER['REMOTE_ADDR']
공격자는 단순히 접속할 수 있습니다.2001:1234:5678::1.2.3.4
.
요약하면 중요한(은행/군사/잠재적 손상 > 50.000 €) 애플리케이션 이외의 경우에는 로컬네트워크의 공격자를 제외할 수 있는 경우 리모트 IP 주소를 사용할 수 있습니다.
위에서 말한 것처럼, 그것은 절대적으로 안전한 것은 아닙니다.하지만 그것을 사용하지 말라는 뜻은 아닙니다.이를 다른 인증 방식(예: COOKIE 값 확인)과 조합하는 것을 검토해 주십시오.