¿Cómo manejar la validación CSRF en Yii2 Framework?

2 minutos de lectura

avatar de usuario de msucil
msucil

Tengo un problema con la validación CSRF en yii2. La validación funciona bien con el formulario predeterminado generado por gii, pero cuando edito el formulario con etiquetas html, el envío del formulario arroja un error de solicitud incorrecto. He deshabilitado la validación csrf para ocultar el error, pero quiero usar esto para la seguridad de la aplicación y la validación de datos.

¿Hay alguna forma de solucionar este error o hay alguna forma de configurarlo para que funcione correctamente en este escenario?

  • Sin ver el código, es difícil suponer qué puede causar este problema. Agregue los cambios de formulario que rompieron la validación CSRF.

    – arogachev

    12 de febrero de 2015 a las 9:17


  • – msucil

    12 de febrero de 2015 a las 15:42


  • Actualice su pregunta en lugar de publicarla como comentario,

    – arogachev

    12/02/2015 a las 15:50

  • Avatar de usuario de Pavel Bariev
    pavel bariev

    Supongo que tu formulario html no se ha ocultado _csrf campo, que se genera automáticamente por los widgets estándar de Yii2.

    Entonces, el código mínimo de su formulario personalizado podría ser así:

    <form method="post">
        <input type="hidden" name="<?= Yii::$app->request->csrfParam; ?>" value="<?= Yii::$app->request->csrfToken; ?>" />
        <button type="submit"> Save </button>
    </form>
    

    • Solo cambié el elemento de entrada del formulario con un elemento html personalizado y mi elemento de formulario incluye el valor csrf con el nombre generado por el gii. no se que esta pasando

      – msucil

      12 de febrero de 2015 a las 15:47

    • Oculté el parámetro _csrf en mi formulario Yii2 y el token autogenerado como su valor. Pero de todos modos, mi app.log está lleno de entradas BadRequestHttpException, aunque los datos del formulario se almacenan normalmente. ¿Qué estoy haciendo mal y cómo solucionarlo?

      – mogilka

      7 de agosto de 2017 a las 9:56

    Prueba esto

    <?=yii\helpers\Html::hiddenInput(Yii::$app->request->csrfParam, Yii::$app->request->csrfToken)?>
    

    ¿Ha sido útil esta solución?