2014-01-09 5 views
9

В моем проекте Symfony2 я хочу, чтобы app_dev.php был доступен только моим IP-адресом. Как и в config.php Я могу установить массив IP-адресов, чтобы этот файл не был доступен для всех. Возможно ли это для app_dev.php?Symfony2: app_dev.php разрешает доступ только к IP?

+3

Просто имейте в виду, что тривиально обманывать входящий IP-адрес. Поэтому, пока вы можете сделать app_dev доступным только с заданным IP-адресом, вы не можете эффективно ограничивать app_dev только вашей машиной. Который, я подозреваю, твоя настоящая цель. – Cerad

ответ

17

В app_dev.php вы найдете ниже код

if (isset($_SERVER['HTTP_CLIENT_IP']) 
    || isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
    || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) 
) { 
    header('HTTP/1.0 403 Forbidden'); 
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 
} 

Вы можете установить IP-адрес, с которого вы хотите получить доступ здесь.

if (!in_array(@$_SERVER['REMOTE_ADDR'], array('Your IP address', '127.0.0.1', 'fe80::1', '::1')) 
) { 
    header('HTTP/1.0 403 Forbidden'); 
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 
} 
+0

wow я полностью контролирую это. благодаря! :) –

+0

должно быть &&! In_array? – timhc22

+0

Это не лучшая практика. Insight (анализ Sensio) возвращает: «Использование функций ответа PHP (например, header() здесь) не рекомендуется, поскольку оно обходит систему событий Symfony. Вместо этого используйте класс HttpFoundationResponse». и «$ _SERVER super global не следует использовать». См. Мой ответ http://stackoverflow.com/a/34897282/3066708 – johnnyevolunium

-8
set in virtual host 

/var/apache2/sites-avable 

<VirtualHost *:80> 
    ServerName domain.com/main 
    ServerAlias www.domain.com/main 
    DocumentRoot /var/www/domain/main/web 
    DirectoryIndex app_dev.php 
</VirtualHost> 

switch 

<VirtualHost 127.0.0.1:80> 
    ServerName domain.com/main 
    ServerAlias www.domain.com/main 
    DocumentRoot /var/www/domain/main/web 
    DirectoryIndex app_dev.php 
</VirtualHost> 
+1

Пожалуйста, объясните, как ваш ответ решает проблему, это поможет каждому понять ваше решение с помощью более ясности и будущей ссылки. – Aziz

3

Это небольшое изменение на @ chanchal118 «s ответ. Наши сайты находятся за балансировщиком нагрузки, поэтому IP-адреса работают несколько иначе. Надеюсь, это будет полезно для людей с подобными настройками.

Мне также было бы интересно услышать какие-либо мысли о проблемах безопасности, если IP-адреса были подделаны.

//todo this may be a security concern if someone managed to spoof their IP as one of these 
$allowedIPs = array('127.0.0.1', 'fe80::1', '::1', 'my.organisation.ip.address'); 

//allow app_dev.php only under these conditions (prevent for production environment) uses HTTP_X_FORWARDED_FOR because behind load balancer 
if (
    isset($_SERVER['HTTP_X_FORWARDED_FOR']) && 
    (! in_array(@$_SERVER['HTTP_X_FORWARDED_FOR'], $allowedIPs)) 
){ 
    header('HTTP/1.0 403 Forbidden'); 
    exit('You are not allowed to access the development environment.'); 
} 
Смежные вопросы