В дополнение к большому количеству изменений и новому функционалу, новые версии 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
, которая позволяет кодировать простые пароли для данного класса пользователя:
Для чего же предназначена эта команда? Во-первых, когда вы используете 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