В приложениях Symfony служба, связанная с классом UriSigner
, добавляет подпись к URL-адресам, чтобы предотвратить их манипулирование. Symfony использует его, например, для подписи URL-адресов, созданных при использовании фрагментов в таких функциях, как ESI.
В Symfony 5.1 улучшили класс UriSigner
с помощью нового метода checkRequest()
. Это позволяет передать объект Symfony\Component\HttpFoundation\Request
для проверки подписи соответствующего URL-адреса, вместо того чтобы создавать его самостоятельно:
// Before
$url = $request->getSchemeAndHttpHost()
.$request->getBaseUrl()
.$request->getPathInfo()
.(null !== ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : '');
if ($this->signer->check($url)) {
// ...
}
// After
if ($this->signer->checkRequest($request)) {
// ...
}
Еще одно улучшение, появившееся в Symfony 5.1, заключается в том, что теперь вы можете автоматически подключать сервис uri_signer
. Вместо того, чтобы вводить эту службу вручную, введите любой аргумент ваших служб или контроллеров с классом Symfony\Component\HttpKernel\UriSigner
, чтобы получить службу:
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\UriSigner;
class MyController extends AbstractController
{
public function someMethod(Request $request, UriSigner $uriSigner)
{
if (!$uriSigner->checkRequest($request)) {
// ...
}
}
}