El administrador de Magento 1.9.2.1 SUPEE-7405 no funciona

8

Instalé el nuevo parche hoy: SUPEE-7405 a través de FTP desde este sitio.

https://magentary.com/kb/install-supee-7405-without-ssh/

Ahora, parece que mi tienda front-end todavía funciona, sin embargo, cuando intento iniciar sesión en / admin me lleva a la página de inicio de sesión / contraseña ... una vez que inicio sesión, aparece un error.

Invalid method Mage_Core_Model_Session::validateFormKey(Array
(
    [0] => y6h9TjgvchV8hCZT
)
)

Trace:
#0 /home/a0cegcom/public_html/app/code/core/Mage/Admin/Model/Observer.php(73): Varien_Object->__call('validateFormKey', Array)
#1 /home/a0cegcom/public_html/app/code/core/Mage/Admin/Model/Observer.php(73): Mage_Core_Model_Session->validateFormKey('y6h9TjgvchV8hCZ...')
#2 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(1357): Mage_Admin_Model_Observer->actionPreDispatchAdmin(Object(Varien_Event_Observer))
#3 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(1336): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Admin_Model_Observer), 'actionPreDispat...', Object(Varien_Event_Observer))
#4 /home/a0cegcom/public_html/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('controller_acti...', Array)
#5 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(527): Mage::dispatchEvent('controller_acti...', Array)
#6 /home/a0cegcom/public_html/app/code/core/Mage/Adminhtml/Controller/Action.php(160): Mage_Core_Controller_Varien_Action->preDispatch()
#7 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(407): Mage_Adminhtml_Controller_Action->preDispatch()
#8 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index')
#9 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#10 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#11 /home/a0cegcom/public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#12 /home/a0cegcom/public_html/index.php(88): Mage::run('', 'store')
#13 {main}

¿algunas ideas? Ya borré mi var / cache y var / session sin suerte

MuhuPower
fuente

Respuestas:

11

Para mí, parece que el parche no se instaló correctamente.

La validateFormKeyfunción está incluida en el parche.

  • Abra el app/code/core/Mage/Core/Model/Session.phparchivo y verifique si la validateFormKeyfunción está aquí
  • Si el archivo se reemplaza app/code/local/Mage/Core/Model/Session.php, debe agregar los nuevos métodos validateFormKeyy renewFormKeymanualmente en el archivo reemplazado. También cambie la línea 60 de:

    $this->setData('_form_key', Mage::helper('core')->getRandomString(16));

    a

    $this->renewFormKey();
  • Si está aquí, definitivamente es un problema de almacenamiento en caché / compilación. Vacíe su caché, así como cualquier otro caché (Barniz / APC, etc.)

  • Si tiene habilitada la compilación, desactívela y luego vuelva a compilar.
  • Si la función no está aquí, eso significa que los archivos no se han cargado correctamente. Tenga en cuenta que cuando extrae el archivo de Magentary, los archivos se extraen en una carpeta SUPEE-7405-1.9.2.1, debe abrir esta carpeta y extraer los archivos de esta carpeta a su raíz Magento, transfiriendo todo el SUPEE-7405- 1.9.2.1 carpeta no aplicará el parche.
Raphael en Digital Pianism
fuente
7

El Nexcess_Turpentinemódulo anula app/code/core/Mage/Core/Model/Session.phpcomo app/code/local/Mage/Core/Model/Session.php. Nos topamos con esto. Este es muy probablemente tu problema. Para apaciguar este parche sin gastar demasiado tiempo, creo que la solución más adecuada es agregar los cambios del parche al archivo de anulación local. La trementina anula ese archivo, creo, porque una reescritura no funcionó para el escenario particular que necesitan cubrir. No creo que esto pueda convertirse en una reescritura.

Aquí está el cambio de parche que debe aplicarse:

--- a/app/code/core/Mage/Core/Model/Session.php
+++ b/app/code/core/Mage/Core/Model/Session.php
@@ -36,7 +36,7 @@
  */
 class Mage_Core_Model_Session extends Mage_Core_Model_Session_Abstract
 {
-    public function __construct($data=array())
+    public function __construct($data = array())
     {
         $name = isset($data['name']) ? $data['name'] : null;
         $this->init('core', $name);
@@ -50,8 +50,27 @@ class Mage_Core_Model_Session extends Mage_Core_Model_Session_Abstract
     public function getFormKey()
     {
         if (!$this->getData('_form_key')) {
-            $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
+            $this->renewFormKey();
         }
         return $this->getData('_form_key');
     }
+
+    /**
+     * Creates new Form key
+     */
+    public function renewFormKey()
+    {
+        $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
+    }
+
+    /**
+     * Validates Form key
+     *
+     * @param string|null $formKey
+     * @return bool
+     */
+    public function validateFormKey($formKey)
+    {
+        return ($formKey === $this->getFormKey());
+    }
}
Kirkmadera
fuente
3

Mis sitios tenían una versión modificada de barniz / trementina del Session.phparchivo en el app/code/local/Mage/Core/Model/directorio.

Haga que las funciones apropiadas dentro de ese archivo ahora se vean como sigue y todo debería funcionar nuevamente.

public function getFormKey()
{
    if (Mage::registry('replace_form_key') &&
            !Mage::app()->getRequest()->getParam('form_key', false)) {
        // flag request for ESI processing
        Mage::register('turpentine_esi_flag', true, true);
        return '{{form_key_esi_placeholder}}';
    } else {
        return $this->real_getFormKey();
    }
}

public function real_getFormKey()
{
    if (!$this->getData('_form_key')) {
        //$this->setData('_form_key', Mage::helper('core')->getRandomString(16));
        $this->renewFormKey();
    }
    return $this->getData('_form_key');
}

public function renewFormKey()
{
    $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
}

public function validateFormKey($formKey)
{
    return ($formKey === $this->getFormKey());
}
Andy Copley
fuente
2

También asegúrese de no modificar app/code/core/Mage/Core/Model/Session.phpdirectamente, pero copie el archivo app/code/local/Mage/Core/Model/Session.phpy realice la modificación adecuada.

(Magento verificará la localruta del directorio antes de usar la coreruta.

Sergey Repin
fuente
Olvidé y esencialmente tenía Magento 1.9.2.4 ejecutándose con app / code / local / Mage / Core / de una versión anterior de magento en local ... por lo tanto, mi inicio de sesión de administrador se rompería en POST.
BENN1TH
1

Agregue las siguientes funciones al Módulo de terceros / personalizado. Si no, implemente / extienda las funciones correctamente.

/**
* Creates new Form key
*/
public function renewFormKey()
{
$this->setData('_form_key', Mage::helper('core')->getRandomString(16));
}

/**
* Validates Form key
*
* @param string|null $formKey
* @return bool
*/
public function validateFormKey($formKey)
{
return ($formKey === $this->getFormKey());
}
}

¡Gracias!

Nithin Ninan
fuente
0

Tuve el mismo error, para mí tuve que revertir el parche (usando el -R después del archivo .sh, pero no sé cómo lo haría a través de PHP)

Luego, en Magento goto system -> general -> web -> configuración de validación de sesión

Cambié 'Validar HTTP_X_FORWARDED_FOR' a 'no' y 'Validar HTTP_USER_AGENT' a 'sí. Asegúrese de que su dominio de cookies esté configurado correctamente también como 'yourdomain.com'

Una vez que hice esto, volví a aplicar el parche y puedo iniciar sesión. Espero que esto te ayude a resolverlo; parece que cualquier parámetro de sesión incorrecto causará el problema de la clave de formulario.

Asegúrese de borrar las cookies de su navegador también antes de probar

Ricky Odin Matthews
fuente