Самый простой способ - разместить приложение в диапазоне частных адресов подсети и убедиться, что маршрутизатор не перенаправляет внешний порт на ваш внутренний сервер.Это на самом деле поведение по умолчанию, потому что переадресацию портов необходимо настроить явно.
Поскольку вы задаете этот вопрос как вопрос PHP, единственно возможный подход PHP заключается в проверке значения переменной $_SERVER['REMOTE_ADDR']
в каждом запросе ипроверьте, соответствует ли он белому списку диапазонов IP-адресов.Эта переменная является строковым представлением адреса, читаемым человеком, но ее можно легко преобразовать в нормализованное представление, которое позволяет проводить прямые сравнения со стандартными операторами сравнения :
(помните, что математика с ip2long()
надежна только с 64-битовые версии PHP.)
Пример:
$network_from = inet_pton('192.168.0.1');
$network_to = inet_pton('192.168.0.255');
// Allowed visitor
$_SERVER['REMOTE_ADDR'] = '192.168.0.5';
$visitor = inet_pton($_SERVER['REMOTE_ADDR']);
var_dump($visitor>=$network_from && $visitor<=$network_to); // bool(true)
// External visitor
$_SERVER['REMOTE_ADDR'] = '151.101.1.69';
$visitor = inet_pton($_SERVER['REMOTE_ADDR']);
var_dump($visitor>=$network_from && $visitor<=$network_to); // bool(false)