2010-11-02 3 views
0

Недавно я разместил веб-сайт Symfony 1.3.6. Я решил сохранить frontend_dev.php на сервере, поэтому я могу отлаживать локальную машину, когда это абсолютно необходимо.Как предотвратить появление панели инструментов отладки в среде prod

Я изменил frontend_dev.php так:

<?php 

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); 

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'dev', true); 

// this check prevents access to debug front controllers that are deployed by accident to production servers. 
// feel free to remove this, extend it or make something more sophisticated. 
if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'))) 
{ 
    //in case something screwy happens ... 
    try 
    { 
     // die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 
     sfContext::createInstance($configuration)->getController()->forward('security', 'error404'); 
     exit(); 
    } 
    catch(Exception $e) 
    { 
     //if we got here, all bets are off anyway, just go away .... 
     exit(); 
    } 
} 

sfContext::createInstance($configuration)->dispatch(); 

То, что я делал, было направить запрос на страницу 404 ошибки. Тем не менее, я заметил, что когда я набрал

Я был направлен на страницу 404 (как я и хотел) - НО была показана панель инструментов отладки - это, очевидно, риск для безопасности. Каков наилучший способ отключить панель инструментов при доступе к контроллеру dev с нелокального компьютера?

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

Какова наилучшая практика в этом случае?

+0

Лично я только что добавил свой IP-адрес к массиву в вашем коде, чтобы разрешить временный доступ к контроллеру frontend_dev, а затем просто удалил его. – Tom

ответ

2

Вы инициализируете конфигурацию в среде dev с включенной отладкой. Попробуйте что-то вроде:

// this check prevents access to debug front controllers that are deployed by accident to production servers. 
// feel free to remove this, extend it or make something more sophisticated. 
if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'))) 
{ 
    //in case something screwy happens ... 
    try 
    { 
     // die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 
     $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); 

     sfContext::createInstance($configuration)->getController()->forward('security', 'error404'); 
     exit(); 
    } 
    catch(Exception $e) 
    { 
     //if we got here, all bets are off anyway, just go away .... 
     exit(); 
    } 
} 
else 
{ 
    $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'dev', true); 
    sfContext::createInstance($configuration)->dispatch(); 
} 
8

sfConfig::set('sf_web_debug', false);

+1

Это просто отключит панель инструментов отладки. Тем не менее вы запустите приложение в среде dev, которая может иметь другую конфигурацию. –

+0

Coronatus: Эта очередь панели инструментов отладки для первой (error404) страницы - но ссылки на этой странице (например, на домашней странице), все же отображается панель инструментов отладки – skyeagle

+0

Итак, поместите эту строку в глобальный файл. –

5

вы просто не хотите ли, чтобы отключить его в файле settings.yml?

dev: 
    .settings: 
    web_debug: false 
Смежные вопросы