2014-01-09 104 views
9

在我的Symfony2項目中,我希望只能通過我的IP地址訪問app_dev.php。就像在config.php我可以設置一個IP數組,因此這個文件不能被所有人訪問。 這也可能爲app_dev.php?Symfony2:app_dev.php只允許訪問IP?

+3

請注意,欺騙傳入的IP地址是微不足道的。因此,儘管只能使用給定的IP地址訪問app_dev,但無法將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

我完全忽略了這一點。謝謝! :) –

+0

應該是&&!in_array? – timhc22

+0

這不是最佳做法。 Insight(由Sensio分析)返回:「使用PHP響應函數(如header()在這裏)不鼓勵,因爲它繞過Symfony事件系統,改爲使用HttpFoundationResponse類。並且「不應使用$ _SERVER超級全局」。查看我的回覆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的答案稍有不同。 我們的網站位於負載均衡器之後,因此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.'); 
}