2014-01-09 17 views
9

In meinem Symfony2 Projekt möchte ich die app_dev.php nur unter meiner IP Adresse erreichen. Wie in der config.php kann ich ein Array von IPs einstellen, so dass diese Datei nicht für jeden zugänglich ist. Ist das auch für die app_dev.php möglich?Symfony2: app_dev.php erlauben Zugang nur zu IP?

+3

Beachten Sie, dass es einfach ist, die eingehende IP-Adresse zu fälschen. Obwohl Sie app_dev nur mit einer bestimmten IP-Adresse aufrufen können, können Sie app_dev nicht nur auf Ihren Computer beschränken. Was, so vermute ich, dein wirkliches Ziel ist. – Cerad

Antwort

17

In app_dev.php finden Sie unter Code finden

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.'); 
} 

Sie können IP-Adressen, von denen Sie hier zugreifen möchten.

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, ich überwach das total. Vielen Dank! :) –

+0

sollte das && sein! In_array? – timhc22

+0

Es ist keine Best Practice. Insight (Analyse durch Sensio) gibt zurück: "Es wird davon abgeraten, PHP-Antwortfunktionen (wie hier header()) zu verwenden, da es das Symfony-Ereignissystem umgeht. Verwenden Sie stattdessen die HttpFoundationResponse-Klasse." und "$ _SERVER Super Global sollte nicht verwendet werden." Siehe meine Antwort 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

Bitte erklären Sie, wie Ihre Antwort das Problem löst, es wird jedem helfen, Ihre Lösung mit mehr zu verstehen Klarheit und für zukünftige Bezugnahme. – Aziz

3

Dies ist eine leichte Abwandlung @ chanchal118 ‚s Antwort. Unsere Standorte sind hinter einem Load Balancer, so dass IPs ein wenig anders funktionieren. Hoffentlich wird es hilfreich für Menschen mit ähnlichen Setups sein.

Ich wäre auch interessiert, irgendwelche Gedanken zu Sicherheitsbedenken zu hören, wenn IPs gefälscht wurden.

//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.'); 
} 
Verwandte Themen