Member 14093672 Ответов: 1

Php удаленный IP-адрес


Всем Привет,

Я пытаюсь проверить удаленный IP-адрес, и если удаленный ip-адрес не совпадает с моим собственным ip-адресом, то эхо или предупреждение на экране говорят, что у вас нет доступа к этому файлу.

и если я включу этот файл в свои собственные страницы, он должен позволить. ниже приведен мой скрипт, который действительно отображает мой ip и удаленный ip-адрес, до этого момента он работает нормально.

это мой конфигурационный файл или файл функций, который я включаю("functions.php") внутри моей целевой страницы index.php-вот тут-то я и хочу ... index.php уметь читать - что не работает.

Любое предложение высоко ценится, я знаю, что могу использовать сеанс, я думаю. но изо всех сил стараюсь его установить.

Что я уже пробовал:

<?php
//	I usually like to add a line to some of my include-files, to keep them from being accessed directly:

if ($_SERVER[‘REMOTE_ADDR’] != $_SERVER[‘SERVER_ADDR’]) die("Nope! You can not have it.");

//==	Attempt to obtain the visitor's actual IP-Address (as best as possible).
function get_real_IP($void=null) {

$headers = array(
'HTTP_VIA',
'HTTP_X_FORWARDED_FOR',
'HTTP_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_FORWARDED',
'HTTP_CLIENT_IP',
'HTTP_HTTP_CLIENT_IP',
'HTTP_FORWARDED_FOR_IP',
'VIA',
'X_FORWARDED_FOR',
'FORWARDED_FOR',
'X_FORWARDED',
'FORWARDED',
'CLIENT_IP',
'FORWARDED_FOR_IP',
'HTTP_XPROXY_CONNECTION',
'HTTP_PROXY_CONNECTION',
'HTTP_X_REAL_IP',
'HTTP_X_PROXY_ID',
'HTTP_USERAGENT_VIA',
'HTTP_HTTP_PC_REMOTE_ADDR',
'HTTP_X_CLUSTER_CLIENT_IP'
);

foreach ($headers as $header) if (isset($_SERVER[$header]) && !empty($_SERVER[$header])) return $_SERVER[$header];

if (trim($_SERVER['SERVER_ADDR'])==trim($_SERVER['REMOTE_ADDR'])) return $_SERVER['SERVER_ADDR'];

return $_SERVER['REMOTE_ADDR'];
}

if ($_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) die("Nope! You can not have it.".$_SERVER['SERVER_ADDR']  ." Remote address ".$_SERVER['REMOTE_ADDR'] );
    
?>

Richard MacCutchan

О каком файле вы говорите? Существуют более простые методы защиты информации на сервере.

Member 14093672

Спасибо Ричард,

Просто пытаюсь защитить вложенные папки и файлы внутри от внешнего мира, но должен быть доступен для приложения, т. е. библиотека конфигураций изображений и т. д.

Не могли бы вы посоветовать, какие еще более простые методы защиты информации на сервере, пожалуйста?

Я также пытаюсь использовать защиту virtualhost, пожалуйста, смотрите мой другой вопрос https://www.codeproject.com/Questions/5128251/Apache-setup-virtual-host.

Я был бы признателен, если бы вы поделились своими мыслями.

Еще раз спасибо за чтение моих постов.

Richard MacCutchan

Файлы сервера не видны внешнему миру через браузеры, если вы не сделаете их таковыми. Я думаю, что вы пытаетесь решить проблему, которой не существует.

Member 14093672

проблема существует, если кто-то пример типа www.xyz.com/lib или www.xyz.com/images/logo.png, он виден внешнему миру. я хочу, чтобы это было видно только приложению, а не внешнему миру. надеюсь, все ясно.

Member 14093672

пример
Директорский матч "c:/xampp/htdocs/xyz/(.+)/">
Заказать отказать,разрешить


пример., я получил xyz/images/logo.png

по умолчанию пользователи не могут просматривать каталог., однако в моем браузере, если я наберу www.xyz/images/logo.png
, файл логотипа появится в браузере. я хочу, чтобы это было ограничено для внешнего мира, но видно для приложения.

Richard MacCutchan

Зачем вообще делать их видимыми для браузера?

Member 14093672

потому что эти файлы в подпапках являются важными/бизнес-скриптами, и они должны быть доступны только приложению, а не внешнему миру.надеюсь я ясно выразился пожалуйста

phil.o

Это то, что вы предпочли бы сделать на сетевом уровне: не направляйте входящие запросы по внешнему IP на порты 80 и 443 на ваш веб-сервер, и никто извне даже не сможет добраться до корня вашего сайта.

1 Ответов

Рейтинг:
2

Mohibur Rashid

--- ТОЛЬКО ЧТО ПОНЯЛ ---
Это сообщение 3-месячной давности, кто-то решил отформатировать сообщение 3-месячной давности
----------------------

Позвольте мне дать вам несколько вариантов, чтобы справиться с этим
1. Ручка через Apache
Вы можете просто отклонить любой запрос, который не приходит loclhost или 127.0.0.1

RewriteEngine On
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteRule ^/super_secret_image_path/?(.*) [R=404,L]

2. обрабатывать через Apache, дополнительный слой, используя обратный прокси-сервер. Запустите свое основное php-приложение с другим портом. И только localhost или внутренняя сеть будет иметь доступ, и вы просматриваете свое приложение, когда вам нужно получить доступ из localhost, используя дополнительный порт
3. через PHP с Apache. Напишите директиву каталога, чтобы запретить все
<Directory "/var/web/your_precious_image_directory">
  Require all denied
</Directory>

С помощью PHP создайте правило, которое будет переводить запрос на загрузку в фактический путь и записывать содержимое файла с соответствующим заголовком.
$filepath = transalte_special_image_path($_GET["img"], $_GET["img"]);


if(file_exists($filepath)) {
    header('Content-Description: File Transfer');
    header('Content-Type: ' . get_actual_content_type($file_path)); // eg: image/jpeg
    header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filepath));
    flush(); // Flush system output buffer
    readfile($filepath);
    exit;
}