it-swarm-es.tech

La comprobación de tokens no funciona en el administrador de componentes personalizados

He creado un componente personalizado y tengo tres formularios que ejecutan diferentes tareas en la vista default.php en subcontroladores dentro del administrador. Dentro de mi vista tmpl default.php, Cada formulario tiene una <?php echo JHtml::_('form.token'); ?> que representa un campo oculto con un token como el nombre con un valor de 1. Tengo un control en mi subcontrolador, JSession::checkToken() or die para determinar si el token es válido.

El problema es que cuando se envía un formulario a través de POST, los datos POST con el token y la función JSession::checkToken() que verifica que el token no coinciden, resultan en FALSE. Después de depurar la clase JSession, descubrí que cuando obtiene un token, NO es lo mismo que el token que se está publicando. Busqué en Google pero pude encontrar alguna solución que funcionara.

De acuerdo con la documentación de Joomla en CSRF , se supone que es tan fácil como agregar <?php echo JHtml::_('form.token'); ?> y agregar la verificación en el controlador JSession::checkToken() or die.

¿En qué pueden diferir los dos tokens de la forma POST y la clase JSession? ¿Hay algo más que tal vez me falte o no haya agregado que no esté en el documento de Joomla?

2
RNickMcCandless

Se me ocurren algunas cosas:

¿Está seguro de que está enviando a un controlador de "sitio", y no a un controlador de "administrador"? El token para un sitio vs formulario de administrador será diferente, ya que la sesión es diferente.

¿Estás seguro de que estás enviando a través de POST? Si está enviando a través de GET necesita verificar el token usando JSession::checkToken('get')

¿Estás seguro de que has puesto el campo de token dentro de las etiquetas de formulario? Puede ver la fuente para confirmar que todo esto parece correcto.

3
user101289