как обезопасить приложение от среды в symfony? - PullRequest
1 голос
/ 21 февраля 2010

я сделал

приложение / интерфейс / конфигурация / security.yml

dev:
 default:
  is_secure: false

prod:
 default:
  is_secure: true

но это не работает, я что-то упустил?

Ответы [ 2 ]

3 голосов
/ 21 февраля 2010

Как говорит Стив, is_secure нельзя настроить для каждой среды.

Полагаю, вы пытаетесь защитить паролем всю свою среду разработки? Я бы посоветовал вам использовать защиту .htaccess / .htpasswd или эквивалентную для защиты сайта таким способом.

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

В обработчиках конфигурации есть метод getConfiguration, который отвечает за получение значений, установленных в различных файлах yml, и создание массива окончательных значений после применения всех переопределений и т. Д.

sfSecurityConfigHander.class.php имеет следующую конфигурацию getConfiguration:

static public function getConfiguration(array $configFiles)
{
  $config = self::flattenConfiguration(self::parseYamls($configFiles));

  // change all of the keys to lowercase
  $config = array_change_key_case($config);

  return $config;
}

в то время как конфигурация, которая зависит от среды, такая как sfDatabaseConfigHandler.class.php, имеет такую ​​конфигурацию:

static public function getConfiguration(array $configFiles)
{
  $config = self::replaceConstants(self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles)));

  foreach ($config as $name => $dbConfig)
  {
    if (isset($dbConfig['file']))
    {
      $config[$name]['file'] = self::replacePath($dbConfig['file']);
    }
  }

  return $config;
}

Ключевым отличием здесь является использование self :: flattenConfigurationWithEnvironment над self :: flattenConfiguration. Я думаю, что если вы расширяете sfSecurityConfigHandler с помощью:

class mySecurityConfigHandler extends sfSecurityConfigHandler {
    static public function getConfiguration(array $configFiles)
    {
      $config = self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles));

      // change all of the keys to lowercase
      $config = array_change_key_case($config);

      return $config;
    }
}

, а затем создайте файл config_handlers.yml в вашей конфигурации, сообщая Symfony об использовании этого класса:

modules/*/config/security.yml:
  class:    sfSecurityConfigHandler
  file:     %sf_lib_dir%/path/to/mySecurityConfigHandler

После этого вы сможете использовать yml в соответствии с вопросом для настройки безопасности для среды.

1 голос
/ 21 февраля 2010

Чего именно вы пытаетесь достичь? Я думаю, вы, возможно, неправильно поняли цель свойства is_secure.

Как правило, он используется для объявления, какие модули / действия приложения должны требовать аутентификации (из плагина, такого как sfGuard ), а не для защиты всей среды.

...