Saltar al contenido

¿Cómo puedo comprobar si el token CSRF proporcionado no es válido en Symfony2?

Solución:

No hay una forma documentada de verificar el token csrf manualmente. Symfony valida automáticamente la presencia y precisión de este token. http://symfony.com/doc/current/book/forms.html#csrf-protection

Sin embargo, existe un proveedor de csrf:

http://api.symfony.com/2.0/Symfony/Component/Form/Extension/Csrf/CsrfProvider/SessionCsrfProvider.html

y

http://api.symfony.com/master/Symfony/Component/Form/Extension/Csrf/CsrfProvider/DefaultCsrfProvider.html

Clases de marcas capaces de proporcionar protección CSRF Puede generar un token CSRF utilizando el método generateCsrfToken (). A este método, debe pasar un valor que sea exclusivo de la página que debe protegerse contra ataques CSRF. Este valor no tiene por qué ser necesariamente secreto. Las implementaciones de esta interfaz son responsables de agregar más información secreta.

Si desea proteger el envío de un formulario contra ataques CSRF, puede proporcionar una cadena de “intención”. De esta manera, se asegura de que el formulario solo se pueda vincular a páginas que están diseñadas para manejar el formulario, es decir, que usan la misma cadena de intención para validar el token CSRF con isCsrfTokenValid ().

Puede recuperar el proveedor de esta manera

$csrf = $this->get('form.csrf_provider');

el uso puede luego usar

public Boolean isCsrfTokenValid(string $intention, string $token)

Validates a CSRF token.

Parámetros cadena $ intención La intención utilizada al generar el token CSRF cadena $ token El token proporcionado por el navegador

Valor devuelto Booleano Si el token proporcionado por el navegador es correcto

Necesita encontrar la cadena de intención utilizada por su formulario.

Algunas publicaciones interesantes sobre SO:

Symfony CSRF y Ajax

Enlaces Symfony2 con token CSRF

Además de artworkad, puede especificar una intención:

Ramita:

<form method="post">
    <input type="text" name="form_name[field]" value="" />
    <input type="hidden" name="_csrf_token" value="{{ csrf_token('form_name') }}">
</form>

PHP:

$token = $request->request->get('_csrf_token');
$csrf_token = new CsrfToken('form_name', $token);
var_dump($this->get('security.csrf.token_manager')->isTokenValid($csrf_token));

O no:

Ramita:

<form method="post">
    <input type="text" name="field" value="" />
    <input type="hidden" name="_csrf_token" value="{{ csrf_token('') }}">
</form>

PHP:

$token = $request->request->get('_csrf_token');
$csrf_token = new CsrfToken('', $token);
var_dump($this->get('security.csrf.token_manager')->isTokenValid($csrf_token));
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *