Новое в Symfony 2.7: Улучшение безопасности

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

Добавлено строковое представление для основных пользователей

Некоторые разработчики добавляют метод __toString ()  в класс сущности пользователя, чтобы определить их строковое представление. Это позволяет использовать приведение типов, таких как (string) $user в PHP приложении  и {{ user }} в шаблонах Twig.

Тем не менее, в процессе функционального тестирования обычно используют пользовательские записи хранящиеся в памяти, чтобы упростить процесс тестирования. Проблема в том, что исходный класс пользователя, определенными Symfony не включает в себя метод __toString () и из-за этого возникают проблемы.

В Symfony 2.7 мы решили добавить новый метод к основному классу пользователя, чтобы определить его строковое представление. Код этого метода прост:

// src/Symfony/Component/Security/Core/User/User.php

public function __toString()
{
    return $this->getUsername();
}

Улучшено расширение Twig  logout

Symfony добавлять пользовательские расширения Twig повер Twig для интегрирации некоторых компонентов в шаблоны. Вы, наверное, знаете и используете много из этих функций, фильтров и тегов, таких как render(), |trans и {% form_theme %}.

Одними из наименее известных и используемых расширений являются функции login_path и logout_url, которые генерируют соответствующий относительный или абсолютный URL, чтобы выйти из данного брандмауэра:

<a href="{{ logout_path('firewall_name') }}">Close session</a>

В Symfony 2.7, имя брандмауэра не является обязательным. Если вы не предоставите его, Symfony будет автоматически использовать текущий брандмауэр:

<a href="{{ logout_path() }}">Close session</a>

Это незначительное изменение также позволяет использовать эту функцию в шаблонах, где вы не знаете название брандмауэра; например, в шаблонах общественных бандлов сторонних производителей.

Добавлена команда для кодирования пароля в консоли

Symfony 2.7 вводит новую команду под названием security:encode-password, которая позволяет кодировать простые пароли для данного класса пользователя:

16533174474_18472e6104_o

Для чего же предназначена эта команда? Во-первых, когда вы используете  in-memory user provider, достаточно сложно закодировать простой пароль перед его сохранением в файле конфигурации безопасности. Например, при использовании sha512 шифрование, нужно было выполнить следующую команду, чтобы получить кодированный пароль:

$ php -r '$pass = "..."; $salt = "..."; $iterations=5000; $salted = $pass.$salt; $digest = hash("sha512", $salted, true); for($i=1; $i<$iterations; $i++) { $digest = hash("sha512", $digest.$salted, true); } echo base64_encode($digest);'

В Symfony 2.7 достаточно выполнить:

$ php app/console security:encode-password 'plain_password' 'AppBundle\Entity\User'

По умолчанию salt автоматически используется при генерации пароля, но вы можете добавить опцию --empty-salt, чтобы этого не делать. Тем не менее, вы не можете указать salt самостоятельно, потому что это считается плохой практикой для безопасности (например, в PHP 7 опция salt функции password_hash() является устаревшим).

В дополнение in-memory user provider, эта команда также может быть полезна при разработке приложения, в случае необходимости, чтобы вручную проверить наличие или обновление некоторых закодированных паролей в базе данных.

Источник: http://symfony.com/blog/new-in-symfony-2-7-security-improvements

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

шестнадцать − одиннадцать =