L'amministratore Magento 1.9.2.1 SUPEE-7405 non funziona


8

Ho installato la nuova patch oggi - SUPEE-7405 via FTP da questo sito.

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

Ora, sembra che il mio negozio front-end funzioni ancora, tuttavia quando provo ad accedere a / admin mi porta alla pagina di accesso / password ... una volta effettuato l'accesso ottengo un errore.

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}

qualche idea? Ho già cancellato var / cache e var / session senza fortuna

Risposte:


11

A me sembra che la patch non sia stata installata correttamente.

La validateFormKeyfunzione è inclusa nella patch.

  • Apri il app/code/core/Mage/Core/Model/Session.phpfile e ricontrolla se la validateFormKeyfunzione è qui
  • Se il file viene sovrascritto app/code/local/Mage/Core/Model/Session.php, è necessario aggiungere i nuovi metodi validateFormKeye renewFormKeymanualmente nel file sovrascritto. Cambia anche la riga 60 da:

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

    per

    $this->renewFormKey();
  • Se è qui, è sicuramente un problema di memorizzazione nella cache / compilazione. Svuota la cache e qualsiasi altra cache (Varnish / APC ecc ...)

  • Se hai abilitato la compilazione, disabilita la compilazione, quindi ricompila.
  • Se la funzione non è presente, significa che i file non sono stati caricati correttamente. Si noti che quando si estrae l'archivio da Magentary, i file vengono estratti in una cartella SUPEE-7405-1.9.2.1, è necessario aprire questa cartella ed estrarre i file da questa cartella nella propria radice Magento, trasferendo l'intero SUPEE-7405- La cartella 1.9.2.1 non applicherà la patch.

7

Il Nexcess_Turpentinemodulo sostituisce app/code/core/Mage/Core/Model/Session.phpcome app/code/local/Mage/Core/Model/Session.php. Ci siamo appena imbattuti in questo. Questo è molto probabilmente il tuo problema. Per placare questa patch senza spendere troppo tempo, penso che la soluzione più appropriata sia quella di aggiungere le modifiche della patch al file di sostituzione locale. La trementina ignora quel file, credo, perché una riscrittura non ha funzionato per lo scenario particolare che devono coprire. Non penso che questo possa essere convertito in una riscrittura.

Ecco la modifica della patch che deve essere applicata:

--- 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());
+    }
}

3

I miei siti avevano una versione modificata di vernice / trementina del Session.phpfile nella app/code/local/Mage/Core/Model/directory.

Rendi le funzioni appropriate all'interno di quel file ora simili al seguente e tutto dovrebbe funzionare di nuovo.

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());
}

2

Assicurarsi inoltre di non modificare app/code/core/Mage/Core/Model/Session.phpdirettamente, ma di copiare il file app/code/local/Mage/Core/Model/Session.phpe apportare la modifica appropriata.

(Magento controllerà il localpercorso della directory prima di utilizzare il corepercorso.


Ho dimenticato ed essenzialmente Magento 1.9.2.4 in esecuzione con app / code / local / Mage / Core / da una precedente versione di magento in locale ... quindi il mio accesso da amministratore si interromperebbe su POST.
BEN1 1

1

Aggiungi le funzioni seguenti al modulo di terze parti / personalizzato. In caso contrario, implementare / estendere correttamente le funzioni.

/**
* 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());
}
}

Grazie!


0

Ho avuto lo stesso errore, per me ho dovuto ripristinare la patch (usando -R dopo il file .sh, ma non so come avresti fatto tramite PHP)

Quindi nel sistema goto Magento -> generale -> web -> impostazioni di convalida della sessione

Ho cambiato 'Convalida HTTP_X_FORWARDED_FOR' in 'no' e 'Convalida HTTP_USER_AGENT' in 'Sì. Assicurati che il tuo dominio dei cookie sia impostato correttamente anche come "tuodominio.com"

Una volta fatto questo, ho riapplicato la patch e posso accedere. Spero che questo ti aiuti a risolverlo - sembra che qualsiasi parametro di sessione errato causi il problema della chiave del modulo.

Assicurati di cancellare i cookie del browser anche prima del test

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.