Poprawka bezpieczeństwa SUPEE-10415 - Możliwe problemy?


37

Nowa łatka Magento 1 została wydana, SUPEE-10415 .

Ta poprawka zapewnia ochronę przed kilkoma typami problemów związanych z bezpieczeństwem

Strona informacyjna: https://magento.com/security/patches/supee-10415
Strona pobierania: https://magento.com/tech-resources/download

Jakie są możliwe problemy, na które należy uważać?

Podziel się także wszystkimi błędami i problemami, które znalazłeś po instalacji łatki.


  • Problem ze stosowaniem SUPEE-10415 na wanilii 1.9.1.1 , pokazy nie mogą być stosowane z powodu komunikatu o błędzie przystojniak w Image.php . EDYCJA: Od 7 grudnia 2017 poprawka jest dostępna w SUPEE-10497

  • Musi mieć zainstalowaną wersję 8788 2 , w przeciwnym razie pojawią się błędy „Nieobsługiwany typ danych”. Więcej informacji.

  • Błąd „404: Nie znaleziono strony” z katalogu błędów / po aktualizacji do SUPEE-10415. Ten problem występuje tylko w instalacjach Magento, które uruchamiają określone rozszerzenia innych firm.
    Obejście: Potwierdź, że żadne rozszerzenie lub dostosowanie nie generuje ostrzeżeń PHP.

5
Wdrożone bez żadnych problemów w Magento 1.9.2.4CE tutaj - większość zmian wydaje się być poprawą parametrów w adminie, a konkretnie zapisywaniem pliku dziennika. Wygląda na to, że wprowadzono kilka zmian w mydłowym API, również pod względem odkażania. Recenzje są również dezynfekowane w obszarze administracyjnym, więc może istnieć możliwość wykorzystania złośliwego kodu do wysłania do recenzji w terminie (spekulatywne)
Ricky Odin Matthews

2
Wdrożony do Magento 1.9.3.0 CE nie ma tutaj problemów. Łatka przed nią 10266 jest wymagana, jeśli ta łatka nie została jeszcze zastosowana.
danmentzer

1
W wersji 1.9.1.0 - w „Regułach cen koszyka” łatka powoduje awarię - twardy błąd w regule widoku - wpis do dziennika -a: 5: {i: 0; s: 23: „Nieobsługiwany typ danych N”; i: 1; s: 1464: "# 0 /opt/bitnami/apps/magento/htdocs/lib/Unserialize/Reader/Arr.php(102): Unserialize_Reader_ArrValue-> read ('N', ';') ---- naprawiono odwrócenie łatki, więc jest to coś w SUPEE-10415
Laith,

1
Nie mam reputacji, aby opublikować odpowiedź, ale nie możesz uaktualnić do Magento 1.9.3.7, a następnie użyć Git do scalenia z tą łatką: stała MAXIMUM_PASSWORD_LENGTH zostanie dodana dwukrotnie, jeśli użyjesz domyślnego zachowania Git (nie mam pojęcia, czy istnieją ustawienia, które są obejściem tego problemu).
toon81

1
W przypadku problemów z wersją 1.9.1.1: Zamiast tego należy użyć SUPEE-10497. Niedawno została wydana, aby rozwiązać ten problem w wersji 1.9.1.1. Przeczytaj uwagi do wydania, ponieważ ta poprawka wymaga usunięcia SUPEE-10266 przed instalacją.
Piotr Kamiński

Odpowiedzi:


26

Poniższe pliki są aktualizowane / dodawane po zastosowaniu poprawki SUPEE - 10415.

app/Mage.php
app/code/core/Mage/Adminhtml/Block/Report/Review/Detail.php
app/code/core/Mage/Adminhtml/Block/Report/Tag/Product/Detail.php
app/code/core/Mage/Adminhtml/Block/Review/Add.php
app/code/core/Mage/Adminhtml/Block/Review/Edit/Form.php
app/code/core/Mage/Adminhtml/Controller/Action.php
app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Filename.php
app/code/core/Mage/Api/Helper/Data.php
app/code/core/Mage/Api/Model/Server/Adapter/Soap.php
app/code/core/Mage/Api/Model/Wsdl/Config.php
app/code/core/Mage/Api/Model/Wsdl/Config/Base.php
app/code/core/Mage/Core/Helper/String.php
app/code/core/Mage/Core/Model/File/Validator/Image.php
app/code/core/Mage/Core/etc/config.xml
app/code/core/Mage/Core/etc/system.xml
app/code/core/Mage/Customer/Model/Customer.php
app/code/core/Mage/Eav/Model/Entity/Attribute/Backend/Serialized.php
app/code/core/Mage/Log/Helper/Data.php
app/code/core/Mage/Rule/Model/Abstract.php
app/code/core/Mage/Sales/Block/Adminhtml/Billing/Agreement/Grid.php
app/code/core/Zend/Form/Decorator/Form.php
app/design/adminhtml/default/default/template/backup/dialogs.phtml
app/design/adminhtml/default/default/template/sales/billing/agreement/view/tab/info.phtml
app/design/adminhtml/default/default/template/xmlconnect/edit/tab/content.phtml
app/design/adminhtml/default/default/template/xmlconnect/edit/tab/design/image_edit.phtml
app/locale/en_US/Mage_Adminhtml.csv
app/locale/en_US/Mage_Customer.csv
js/mage/adminhtml/backup.js
lib/Varien/Filter/FormElementName.php

Kilka ważnych punktów:

1) Dozwolone rozszerzenia plików: log, txt, html, csv. zamelduj się poniżej plików

app/Mage.php
app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Filename.php
app/code/core/Mage/Core/etc/system.xml
app/code/core/Mage/Log/Helper/Data.php

2) Maksymalna ustawiona długość hasła to 256 znaków i sprawdzenie poprawności w app/code/core/Mage/Customer/Model/Customer.phppliku

@@ -74,6 +74,11 @@ class Mage_Customer_Model_Customer extends Mage_Core_Model_Abstract
     const MINIMUM_PASSWORD_LENGTH = 6;

     /**
+     * Maximum Password Length
+     */
+    const MAXIMUM_PASSWORD_LENGTH = 256;
+
+    /**
      * Model event prefix
      *
      * @var string
@@ -876,6 +881,10 @@ class Mage_Customer_Model_Customer extends Mage_Core_Model_Abstract
             $errors[] = Mage::helper('customer')
                 ->__('The minimum password length is %s', self::MINIMUM_PASSWORD_LENGTH);
         }
+        if (strlen($password) && !Zend_Validate::is($password, 'StringLength', array('max' => self::MAXIMUM_PASSWORD_LENGTH))) {
+            $errors[] = Mage::helper('customer')
+                ->__('Please enter a password with at most %s characters.', self::MAXIMUM_PASSWORD_LENGTH);
+        }
         $confirmation = $this->getPasswordConfirmation();
         if ($password != $confirmation) {
             $errors[] = Mage::helper('customer')->__('Please make sure your passwords match.');
@@ -902,7 +911,7 @@ class Mage_Customer_Model_Customer extends Mage_Core_Model_Abstract
     }

     /**
-     * Validate customer attribute values on password reset
+     * Validate customer password on reset
      * @return bool
      */
     public function validateResetPassword()
@@ -916,6 +925,10 @@ class Mage_Customer_Model_Customer extends Mage_Core_Model_Abstract
             $errors[] = Mage::helper('customer')
                 ->__('The minimum password length is %s', self::MINIMUM_PASSWORD_LENGTH);
         }
+        if (!Zend_Validate::is($password, 'StringLength', array('max' => self::MAXIMUM_PASSWORD_LENGTH))) {
+            $errors[] = Mage::helper('customer')
+                ->__('Please enter a password with at most %s characters.', self::MAXIMUM_PASSWORD_LENGTH);
+        }
         $confirmation = $this->getPasswordConfirmation();
         if ($password != $confirmation) {
             $errors[] = Mage::helper('customer')->__('Please make sure your passwords match.');

Do edycji EE Dodano dodatkowe cztery pliki

app/code/community/OnTap/Merchandiser/Block/Adminhtml/Catalog/Product/List.php
app/design/adminhtml/default/default/template/merchandiser/smartmerch/tab.phtml
app/design/frontend/rwd/enterprise/template/giftcardaccount/onepage/payment/scripts.phtml
app/design/frontend/enterprise/default/template/giftcardaccount/onepage/payment/scripts.phtml

Niektóre ważne punkty w EE

Dodano warunek w poniższych plikach

app/design/frontend/rwd/enterprise/template/giftcardaccount/onepage/payment/scripts.phtml 
  app/design/frontend/enterprise/default/template/giftcardaccount/onepage/payment/scripts.phtml

Zaktualizuj poniższy warunek w plikach motywu.

if (elements[i].name == 'form_key') 
{
                continue;
 }

Po więcej informacji:

https://magento.com/security/patches/supee-10415 http://devdocs.magento.com/guides/m1x/ce19-ee114/ee1.14_release-notes.html#ee114-11436 http: // devdocs. magento.com/guides/m1x/ce19-ee114/ce1.9_release-notes.html#ce19-1936


Po zastosowaniu SUPEE-10415, zarówno front-end, jak i back-end otrzymują błąd 404, jak mogę rozwiązać ten problem? magento.stackexchange.com/q/215620/57334
zus

Czy możesz stworzyć oddzielny bilet i wyjaśnić za pomocą dziennika błędów i dodać komentarz, pomogę ci. ten problem z powodu .htaccess lub zastąpienia modułu w wersji lokalnej.
Rama Chandran M


20

SUPEE-10415 ...

  1. Rozwiązuje niektóre problemy XSS panelu administracyjnego w następujących obszarach:

    • Raport recenzji produktów
    • Raport dotyczący tagów produktów
    • Recenzje produktów dodaj / edytuj interfejs
    • Umowy billingowe
    • Karta edytora treści xmlconnect
    • Serializowane reguły
  2. Ogranicza rozszerzenia plików, których można używać dla plików dziennika systemu i wyjątków. Dopuszczalne rozszerzenia: .log, .txt, .html,.csv

  3. Określa 256-znakowy górny limit haseł do kont klientów. Ta szczególna zmiana jest niedorzeczna; nie jestem pewien, skąd wzięli ten świetny pomysł.

Żadna z tych zmian nie wydaje się być poważną zmianą lub zmianami niezgodnymi wstecz, z wyjątkiem być może ograniczenia długości hasła klienta.


9
Długość 256 haseł jest w rzeczywistości błędem w niezałatanym Magento, ponieważ pole hasła do bazy danych ma wartość customer_entity_varchar.value, która wynosi maxlength = 255. Nie jestem pewien, co się stanie bez łatki, jeśli spróbujesz ustawić więcej niż 255, prawdopodobnie jednak powoduje to problem.
Ricky Odin Matthews

12
Masz rację; customer_entity_varchar.value ma ograniczony rozmiar kolumny. Nie jest to jednak błąd, ponieważ hasło nie jest przechowywane w tej kolumnie. Solone i zaszyfrowaną hasło jest przechowywane. Ta wartość będzie zawsze miała stałą długość, niezależnie od rozmiaru oryginalnego hasła. Przed tą poprawką nie byłoby absolutnie żadnego problemu z wprowadzeniem hasła dłuższego niż 255 znaków.
t-richards

3
Zakładam, że zmiana długości hasła ma coś wspólnego z APPSEC-1330. magento.com/security/patches/supee-10415
quasiobject

7
Być może to ich myślenie, Rob: stackoverflow.com/a/98857/8199523
RickyMage123

1
@ T-Richards świetny punkt, jesteś tam. Dlaczego myślałeś, że to zrobią? Myślę, że hash długie hasło może spowodować problem DoS pod względem wykorzystania procesora, z pewnością dłuższe hasło zabiera więcej CPU / pamięci w PHP?
Ricky Odin Matthews

12

SUPEE 10415 Wymaga poprawki 8788 v2

Napotkałem ten sam błąd, co w poprzednim poście, ale wygląda na to, że został usunięty.

a:5:{i:0;s:23:"Unsupported data type N";i:1;s:2942:"#0 /chroot/home/mywebroot/html/lib/Unserialize/Reader/Arr.php(102): Unserialize_Reader_ArrValue->  read('N', ';')
#1 /chroot/home/mywebroot/html/lib/Unserialize/Parser.php(53): Unserialize_Reader_Arr->read('N', ';')
#2 /chroot/home/mywebroot/html/app/code/core/Mage/Core/Helper/UnserializeArray.php(44): Unserialize_Parser->unserialize('a:6:{s:4:"type"...')
#3 /chroot/home/mywebroot/html/app/code/core/Mage/Rule/Model/Abstract.php(179): Mage_Core_Helper_UnserializeArray->unserialize('a:6:{s:4:"type"...')
#4 /chroot/home/mywebroot/html/app/code/core/Mage/Rule/Model/Abstract.php(353): Mage_Rule_Model_Abstract->getConditions()
#5 /chroot/home/mywebroot/html/app/code/core/Mage/SalesRule/Model/Validator.php(216): Mage_Rule_Model_Abstract->validate(Object(   Mage_Sales_Model_Quote_Address))
#6 /chroot/home/mywebroot/html/app/code/core/Mage/SalesRule/Model/Validator.php(242): Mage_SalesRule_Model_Validator->_canProcessRule(Object(  Mage_SalesRule_Model_Rule), Object(Mage_Sales_Model_Quote_Address))
#7 /chroot/home/mywebroot/html/app/code/core/Mage/SalesRule/Model/Quote/Freeshipping.php(74): Mage_SalesRule_Model_Validator->processFreeShipping(Object(  Mage_Sales_Model_Quote_Item))
#8 /chroot/home/mywebroot/html/app/code/core/Mage/Sales/Model/Quote/Address.php(1013): Mage_SalesRule_Model_Quote_Freeshipping->collect(Object(    Mage_Sales_Model_Quote_Address))
#9 /chroot/home/mywebroot/html/app/code/core/Mage/Sales/Model/Quote.php(1331): Mage_Sales_Model_Quote_Address->collectTotals()
#10 /chroot/home/mywebroot/html/app/code/core/Mage/Checkout/Model/Cart.php(458): Mage_Sales_Model_Quote->collectTotals()
#11 /chroot/home/mywebroot/html/app/code/core/Mage/Checkout/controllers/CartController.php(127): Mage_Checkout_Model_Cart->save()
#12 /chroot/home/mywebroot/html/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Checkout_CartController->indexAction()
#13 /chroot/home/mywebroot/html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index')
#14 /chroot/home/mywebroot/html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(   Mage_Core_Controller_Request_Http))
#15 /chroot/home/mywebroot/html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#16 /chroot/home/mywebroot/html/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#17 /chroot/home/mywebroot/html/index.php(96): Mage::run('', 'store')
#18 {main}";s:3:"url";s:15:"/checkout/cart/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";}

Napotkałem powyższy błąd, kiedy instalowałem nową łatkę w wersji M 1.8.00 CE. Przyczyną tego wydaje się być fakt, że po zainstalowaniu łatki v2 8788 wprowadziliśmy ręczne poprawki większości problemów z tej łatki, ale pominęliśmy części nieserializowane.

Zamiast przywracać łatkę ręcznie wprowadziłem modyfikacje, a teraz strona działa poprawnie.

Poniżej znajdziesz kod poprawki 8788

diff --git lib/Unserialize/Parser.php lib/Unserialize/Parser.php
index 423902a..2c01684 100644
--- lib/Unserialize/Parser.php
+++ lib/Unserialize/Parser.php
@@ -34,6 +34,7 @@ class Unserialize_Parser
     const TYPE_DOUBLE = 'd';
     const TYPE_ARRAY = 'a';
     const TYPE_BOOL = 'b';
+    const TYPE_NULL = 'N';

     const SYMBOL_QUOTE = '"';
     const SYMBOL_SEMICOLON = ';';

diff --git lib/Unserialize/Reader/Arr.php lib/Unserialize/Reader/Arr.php
index caa979e..cd37804 100644
--- lib/Unserialize/Reader/Arr.php
+++ lib/Unserialize/Reader/Arr.php
@@ -101,7 +101,10 @@ class Unserialize_Reader_Arr
         if ($this->_status == self::READING_VALUE) {
             $value = $this->_reader->read($char, $prevChar);
             if (!is_null($value)) {
-                $this->_result[$this->_reader->key] = $value;
+                $this->_result[$this->_reader->key] =
+                    ($value == Unserialize_Reader_Null::NULL_VALUE && $prevChar == Unserialize_Parser::TYPE_NULL)
+                        ? null
+                        : $value;
                 if (count($this->_result) < $this->_length) {
                     $this->_reader = new Unserialize_Reader_ArrKey();
                     $this->_status = self::READING_KEY;

diff --git lib/Unserialize/Reader/ArrValue.php lib/Unserialize/Reader/ArrValue.php
index d2a4937..c6c0221 100644
--- lib/Unserialize/Reader/ArrValue.php
+++ lib/Unserialize/Reader/ArrValue.php
@@ -84,6 +84,10 @@ class Unserialize_Reader_ArrValue
                     $this->_reader = new Unserialize_Reader_Dbl();
                     $this->_status = self::READING_VALUE;
                     break;
+                case Unserialize_Parser::TYPE_NULL:
+                    $this->_reader = new Unserialize_Reader_Null();
+                    $this->_status = self::READING_VALUE;
+                    break;
                 default:
                     throw new Exception('Unsupported data type ' . $char);
             }

diff --git lib/Unserialize/Reader/Null.php lib/Unserialize/Reader/Null.php
new file mode 100644
index 0000000..93c7e0b
--- /dev/null
+++ lib/Unserialize/Reader/Null.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magento.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magento.com for more information.
+ *
+ * @category    Unserialize
+ * @package     Unserialize_Reader_Null
+ * @copyright  Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
+ * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+/**
+ * Class Unserialize_Reader_Null
+ */
+class Unserialize_Reader_Null
+{
+    /**
+     * @var int
+     */
+    protected $_status;
+
+    /**
+     * @var string
+     */
+    protected $_value;
+
+    const NULL_VALUE = 'null';
+
+    const READING_VALUE = 1;
+
+    /**
+     * @param string $char
+     * @param string $prevChar
+     * @return string|null
+     */
+    public function read($char, $prevChar)
+    {
+        if ($prevChar == Unserialize_Parser::SYMBOL_SEMICOLON) {
+            $this->_value = self::NULL_VALUE;
+            $this->_status = self::READING_VALUE;
+            return null;
+        }
+
+        if ($this->_status == self::READING_VALUE && $char == Unserialize_Parser::SYMBOL_SEMICOLON) {
+            return $this->_value;
+        }
+        return null;
+    }
+}

Możesz także przeczytać więcej o błędzie w tym poście ROZWIĄZANY: nowa klasa Unserialize_Parser zgłasza wyjątki od wartości NULL


Aha! dobra uwaga, aby zapobiec problemowi, wymagana jest wersja 8788 V2!
Ikona

Czy możesz powiedzieć, na których stronach Twojej witryny wystąpiły błędy „Nieobsługiwany typ danych”? Próba replikacji.
Ikona

Byłem w stanie uruchomić go na stronie kategorii oraz stronie produktu i koszyka, gdy produkt był w koszyku.
danmentzer

@danmentzer jak mogę rozwiązać błąd, przywróć łatkę 9767 v1 :: error: justpaste.it/1e9pn
zus

@ zus Właśnie widziałem twój post, czy zrozumiałeś to z wyglądu twojej pasty. Zaryzykuję zgadnij trzy różne możliwe przyczyny twojego błędu. 1. Masz niewłaściwą wersję łatki (jest to najmniej prawdopodobne) 2. Twoja łatka nie jest już zastosowana. 3. Być może naprawiłeś niektóre z nich, a łatka nie podoba ci się, jak to zrobiłeś. Przepraszam, jeśli to nie jest pomocne
danmentzer

11

Wystąpił problem z tą poprawką, gdy na każdej stronie w witrynie pojawiał się błąd „404: Nie znaleziono strony” z errors/katalogu. Po drobnym kopaniu okazało się, że było to spowodowane ostrzeżeniem PHP wydanym w Mage_Core_Model_App::init, które następnie powoduje Mage_Core_Model_Store_Exceptionaw następujących wierszach łatki:

diff --git app/Mage.php app/Mage.php
index 566027d..165928d 100644
--- app/Mage.php
+++ app/Mage.php
@@ -805,7 +805,12 @@ final class Mage
         static $loggers = array();

         $level  = is_null($level) ? Zend_Log::DEBUG : $level;
-        $file = empty($file) ? 'system.log' : $file;
+        $file = empty($file) ? 'system.log' : basename($file);
+
+        // Validate file extension before save. Allowed file extensions: log, txt, html, csv
+        if (!self::helper('log')->isLogFileExtensionValid($file)) {
+            return;
+        }

         try {
             if (!isset($loggers[$file])) {
  1. Ostrzeżenie PHP występuje przed zainicjowaniem sklepów
  2. Ostrzeżenie jest odbierane przez mageCoreErrorHandler(), który wywołuje, Mage::log()aby zalogować wiadomość do pliku dziennika.
  3. Mage::log() połączenia Mage::helper('log')
  4. Mage_Log_Helper_Data::__constructpołączenia Mage::getStoreConfig(), które dzwonią Mage::app()->getStore(), ale sklepy nie zostały jeszcze zainicjowane i Mage_Core_Model_Store_Exceptiongenerowany jest znak „a”
  5. app/Mage.php:647 wyłapuje wyjątek i zwraca stronę 404

Nie jestem do końca pewien, jakie jest rozwiązanie, oprócz naprawienia ostrzeżenia i / lub wyłapania wyjątku podczas sprawdzania rozszerzenia pliku dziennika. Zamierzam zgłosić to Magento, aby zobaczyć, co myślą.


jakiej wersji używasz?
Ikona

1
@Ikon 1.9.3.6. Zauważyłem, że niektóre z naszych mniej aktualnych projektów nie miały tej __construct()metody Mage_Log_Helper_Data, więc nie wpłynie to na to, ale zarówno najnowsze wersje społecznościowe, jak i korporacyjne.
Tomas Gerulaitis

Wygląda na to, że magento rozwiązało to pytanie devdocs.magento.com/guides/m1x/ce19-ee114/…
Ikona

Czy Magento wspomniało, czy planuje naprawić ten problem w następnej łatce?
Ikona

1
@Icon Widzieliśmy błędy w adminach i interfejsie użytkownika, ponieważ problem występował podczas inicjalizacji konfiguracji Magento.
Tomas Gerulaitis,

8

1. Rozwiązany problem: nieprawidłowy klucz tajny, gdy użytkownik ładuje administratora

W tych łatkach Magento nie wyświetla już “Invalid Secret Key. Please refresh the page.” message when a user loads the Admin.

Zmieniając kod o

app/code/core/Mage/Adminhtml/Controller/Action.php

ściśle wszystkie hasła klienta do długości MAX 256:

Wiemy już, że minimalna długość hasła magento 1.x wynosi 6 .

ale w tej łatce magento ma limit maksymalnej długości do 256.

Ten przypadek, Magento dokonał zmian w funkcji validate() z klasy modelu klienta .so, jeśli ktoś ma zastąpić klasę a także przesłonić to powinny one dodać poniżej kodu nathat override class

if (strlen($password) && !Zend_Validate::is($password, 'StringLength', array('max' => self::MAXIMUM_PASSWORD_LENGTH))) {
   $errors[] = Mage::helper('customer')
       ->__('Please enter a password with at most %s characters.', self::MAXIMUM_PASSWORD_LENGTH);
}

Dodaj $this->escapeHtml()i Mage :: helper ('core') -> quoteEscape () dla niektórych plików, w których możliwy jest atak XSS

Jeśli ktoś nadpisze te pliki, należy dodać poniższy kod do repeciev overrider class 1.app/code/core/Mage/Adminhtml/Block/Report/Review/Detail.php

zastąpić

$ this -> _ headerText = Mag :: pomocnik ('raporty') -> __ ('Recenzje dla% s', $ product-> getName ());

z

$ this -> _ headerText = Mag :: pomocnik ('raporty') -> __ ('Recenzje dla% s', $ this-> escapeHtml ($ product-> getName ()));

2.app/code/core/Mage/Adminhtml/Block/Report/Tag/Product/Detail.php

zastąpić

$ this -> _ headerText = Mag :: pomocnik ('raporty') -> __ ('Tagi przesłane do% s', $ product-> getName ());

z

$this->_headerText = Mage::helper('reports')->__('Tags submitted to %s', $this->escapeHtml($product->getName()));

3.app/code/core/Mage/Adminhtml/Block/Review/Edit/Form.php

zastąpić

'text' => '<a href="' . $this->getUrl('*/catalog_product/edit', array('id' => $product->getId())) . '" onclick="this.target=\'blank\'">' . $product->getName() . '</a>'

z

'text' => '<a href="' . $this->getUrl('*/catalog_product/edit', array('id' => $product->getId())) . '" onclick="this.target=\'blank\'">' . $this->escapeHtml($product->getName()) . '</a>'

  1. Zobacz rozliczenie zamówienia sprzedaży: app / design / adminhtml / default / default / template / sales / billing / agreement / view / tab / info.phtml

zastąpić

<?php echo $this->getCustomerEmail() ?>

z

<?php echo $this->escapeHtml($this->getCustomerEmail()) ?>

  1. app / design / adminhtml / default / default / template / xmlconnect / edit / tab / content.phtml autor: Mage :: helper ('core') -> quoteEscape

zastąpić

this.pageOptions += '<option value="<?php echo $helper->jsQuoteEscape($page['value']) ?>"><?php echo $helper->jsQuoteEscape($page['label']) ?></option>';

z

$this.pageOptions += '<option value="<?php echo $helper->jsQuoteEscape($page['value']) ?>"><?php echo $helper->quoteEscape($page['label']) ?></option>';

  1. app / design / adminhtml / default / default / template / xmlconnect / edit / tab / design / image_edit.phtml autor: Mage :: helper ('core') -> quoteEscape

zastąpić

<option value="<?php echo $page['value']; ?>"><?php echo $page['label']; ?></option>

z

<option value="<?php echo $page['value']; ?>"><?php echo Mage::helper('core')->quoteEscape($page['label']); ?></option>


4
Dzięki @Amit przegapiłem „Rozwiązany: nieprawidłowy problem z tajnym kluczem” w mojej odpowiedzi :). +1
Rama Chandran M

1
zapraszamy:) ... wykonałeś dobrą robotę w tym pytaniu
Amit Bera

7

Jeśli już zastosowałeś SUPEE-10358 ^ lub ręcznie załatałeś problem app/code/core/Mage/Adminhtml/Controller/Action.phpNieprawidłowy tajny klucz ”, musisz ręcznie usunąć tę sekcję z pliku poprawki:

diff --git app/code/core/Mage/Adminhtml/Controller/Action.php app/code/core/Mage/Adminhtml/Controller/Action.php
index 2a8e63f..f2ee208 100644
--- app/code/core/Mage/Adminhtml/Controller/Action.php
+++ app/code/core/Mage/Adminhtml/Controller/Action.php
@@ -186,7 +186,7 @@ class Mage_Adminhtml_Controller_Action extends Mage_Core_Controller_Varien_Actio
                 'message' => $_keyErrorMsg
             )));
         } else {
-                if ($_keyErrorMsg != ''){
+                if (!$_isValidFormKey){
                 Mage::getSingleton('adminhtml/session')->addError($_keyErrorMsg);
             }
             $this->_redirect( Mage::getSingleton('admin/session')->getUser()->getStartupPageUrl() );

Dodatkowo, jeśli naprawiłeś już literówkę „ new-pawwsord ” (wprowadzoną w SUPEE-10266), app/design/adminhtml/default/default/template/backup/dialogs.phtmlusuń również tę sekcję z patcha:

diff --git app/design/adminhtml/default/default/template/backup/dialogs.phtml app/design/adminhtml/default/default/template/backup/dialogs.phtml
index c5a3f82..2ff57cc 100644
--- app/design/adminhtml/default/default/template/backup/dialogs.phtml
+++ app/design/adminhtml/default/default/template/backup/dialogs.phtml
@@ -158,7 +158,7 @@
                             <td class="value">
                                 <!-- This is a dummy hidden field to trick firefox from auto filling the password -->
                                 <input type="password" class="input-text no-display" name="dummy" id="dummy" />

-                                    <input type="password" name="ftp_pass" id="ftp_pass" autocomplete="new-pawwsord">
+                                    <input type="password" name="ftp_pass" id="ftp_pass" autocomplete="new-password">
                             </td>
                         </tr>
                         <tr>

^ MageSupport dostarczył SUPEE-10358 w odpowiedzi na zgłoszenie do pomocy technicznej EE dotyczące problemu InvalidSecretKey


5

Problem: łatka nie działa na wanilii 1.9.1.1

Edycja 1: poprawka dodana poniżej.

Edycja 2: moja poprawka nie jest już potrzebna, Magento zapewniło SUPEE-10497, który rozwiązuje ten problem.

Problem:

# file: PATCH_SUPEE-10415_CE_1.9.1.1_v1-2017-11-27-05-47-08.sh
Checking if patch can be applied/reverted successfully...
ERROR: Patch can't be applied/reverted successfully.

checking file app/Mage.php
checking file app/code/core/Mage/Adminhtml/Block/Report/Review/Detail.php
checking file app/code/core/Mage/Adminhtml/Block/Report/Tag/Product/Detail.php
checking file app/code/core/Mage/Adminhtml/Block/Review/Add.php
checking file app/code/core/Mage/Adminhtml/Block/Review/Edit/Form.php
checking file app/code/core/Mage/Adminhtml/Controller/Action.php
checking file app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
checking file app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Filename.php
checking file app/code/core/Mage/Api/Helper/Data.php
checking file app/code/core/Mage/Api/Model/Server/Adapter/Soap.php
checking file app/code/core/Mage/Api/Model/Wsdl/Config.php
checking file app/code/core/Mage/Api/Model/Wsdl/Config/Base.php
checking file app/code/core/Mage/Core/Helper/String.php
checking file app/code/core/Mage/Core/Model/File/Validator/Image.php
Hunk #1 FAILED at 90.
1 out of 1 hunk FAILED
checking file app/code/core/Mage/Core/etc/config.xml
checking file app/code/core/Mage/Core/etc/system.xml
Hunk #1 succeeded at 651 (offset 1 line).
Hunk #2 succeeded at 661 (offset 1 line).
checking file app/code/core/Mage/Customer/Model/Customer.php
checking file app/code/core/Mage/Eav/Model/Entity/Attribute/Backend/Serialized.php
checking file app/code/core/Mage/Log/Helper/Data.php
checking file app/code/core/Mage/Rule/Model/Abstract.php
checking file app/code/core/Mage/Sales/Block/Adminhtml/Billing/Agreement/Grid.php
checking file app/code/core/Zend/Form/Decorator/Form.php
checking file app/design/adminhtml/default/default/template/backup/dialogs.phtml
checking file app/design/adminhtml/default/default/template/sales/billing/agreement/view/tab/info.phtml
checking file app/design/adminhtml/default/default/template/xmlconnect/edit/tab/content.phtml
checking file app/design/adminhtml/default/default/template/xmlconnect/edit/tab/design/image_edit.phtml
checking file app/locale/en_US/Mage_Adminhtml.csv
checking file app/locale/en_US/Mage_Customer.csv
checking file js/mage/adminhtml/backup.js
checking file lib/Varien/Filter/FormElementName.php

Waniliowe Magento 1.9.1.1 zostało pobrane z https://github.com/OpenMage/magento-mirror/archive/1.9.1.1.tar.gz

Wcześniej zastosowane łaty w tym Magento 1.9.1.1:

2017-11-29 07:37:12 UTC | SUPEE-5994 | CE_1.6.0.0 | v1 | _ | n/a | SUPEE-5994_CE_1.6.0.0_v1.patch
2017-11-29 07:37:12 UTC | SUPEE-6237 | EE_1.14.2.0 | v1 | 8b216c42e2e5d2cb5d8e500fcb6690abede9df52 | Fri Jun 12 13:39:59 2015 +0300 | v1.14.2.0..HEAD
2017-11-29 07:37:12 UTC | SUPEE-6285 | CE_1.9.1.1 | v2 | 7226d88b1eeb07a5fbc4e62be189a5219457cc14 | Mon Jun 22 16:32:26 2015 +0300 | 202596e441..7226d88b1e
2017-11-29 07:37:12 UTC | SUPEE-6482 | CE_1.9.2.0 | v1 |  | Tue Jul 14 14:17:04 2015 +0300 |
2017-11-29 07:37:12 UTC | SUPEE-6788 | CE_1.9.1.1 | v1 | 2349a68440e870cd68dfa81fb982f3b7a42cd099 | Fri Oct 23 14:49:16 2015 +0300 | b240663
2017-11-29 07:37:12 UTC | SUPEE-7405-CE-1-9-1-1 | CE_1.9.1.1 | v1 | f1c57f70de3fc2bea64bbe3ddf3bdf076b750f8e | Tue Jan 19 15:29:35 2016 +0200 | 2349a68440..f1c57f70de
2017-11-29 07:37:12 UTC | SUPEE-7405 | CE_1.9.1.1 | v1.1 | 38d673b4d2b132c6df53becc9d92346aa5d9627e | Fri Feb 5 13:28:39 2016 +0200 | f1c57f70de3fc2bea64bbe3ddf3bdf076b750f8e..38d673b4d2b132c6df53becc9d92346aa5d9627e
2017-11-29 07:37:12 UTC | SUPEE-7616 | CE_1.9.2.2-CE_1.8.0.0 | v1 | 1609c0d0be86473d357346fa51f93c12b365d7a1 | Tue Dec 8 12:53:31 2015 +0200 | e1fc3c59c9587427b8a9c88655715f27afbfe970..1609c0d0be86473d357346fa51f93c12b365d7a1
2017-11-29 07:37:12 UTC | SUPEE-8167 | EE_1.14.2.0 | v1 | 87bb97f9b0b2871f842b7faabf667a81806f937e | Thu Apr 27 13:31:21 2017 +0300 | 6010eb82..87bb97f9b
2017-11-29 07:37:12 UTC | SUPEE-8788 | CE_1.9.1.1 | v2 | 8d9fad1daf5131de3430ef09b0816d3d133c8412 | Mon Sep 26 14:06:18 2016 +0300 | 38d673b4d2..8d9fad1daf
2017-11-29 07:37:12 UTC | SUPEE-8967 | EE_1.13.1.0 | v1 | 1fa53e9533f6f3a16f24d9b64dabef0ab7f965d7 | Thu Aug 18 16:32:48 2016 +0300 | 97d160644..1fa53e9533
2017-11-29 07:37:13 UTC | SUPEE-9652 | EE_1.14.3.1 | v1 | 4038f0785d828794083f53f10c01aaa6af403523 | Tue Jan 24 15:03:12 2017 +0200 | 9586981e6ca8b255014b242d50b68b88525b0754..4038f0785d828794083f53f10c01aaa6af403523
2017-11-29 07:37:13 UTC | PATCH_SUPEE-9767_CE_1.9.3.0_v2 | CE_1.9.3.0 | v2 | 6566db274beaeb9bcdb56a62e02cc2da532e618c | Thu Jun 22 04:30:03 2017 +0300 | v1.14.3.3..HEAD
2017-11-29 07:37:13 UTC | SUPEE-10336_v1.14.2.4 | CE_1.9.2.4 | v1 | 721708ecf41f0ee745b8f441a4bfe56471b493a7 | Fri Sep 8 17:55:44 2017 +0300 | cc0d87..721708e
2017-11-29 07:37:13 UTC | SUPEE-10266-CE-1.9.1.1 | CE_1.9.1.1 | v1 | f66c6bcd3c16c5ca934823e6a91b5696698e497c | Fri Sep 1 12:15:53 2017 +0300 | 8d9fad1daf5131de3430ef09b0816d3d133c8412..HEAD

Oficjalna poprawka dla poprawki SUPEE-10415 dla 1.9.1.1:

  • Jeśli zainstalowałeś SUPEE-10266:
    przywróć go za pomocą: ./PATCH_SUPEE-10266_CE_1.9.1.1_v1-2017-09-15-04-59-56.sh --revert
  • Jeśli zainstalowałeś SUPEE-10415:
    przywróć go za pomocą ./PATCH_SUPEE-10415_CE_1.9.1.1_v1-2017-11-27-05-47-08.sh --revert
  • Teraz zastosuj SUPEE-10497

Ręczna poprawka dla poprawki SUPEE-10415 dla 1.9.1.1 [nieaktualne]:

Edytuj plik PATCH_SUPEE-10415_CE_1.9.1.1_v1-2017-11-27-05-47-08.sh, zamień linie 445- 447.

Stary:

         $fileInfo = getimagesize($filePath);
         if (is_array($fileInfo) and isset($fileInfo[2])) {
             if ($this->isImageType($fileInfo[2])) {

Nowy:

         list($imageWidth, $imageHeight, $fileType) = getimagesize($filePath);
         if ($fileType) {
             if ($this->isImageType($fileType)) {

Ja też tego doświadczam. Wygląda na problem app/code/core/Mage/Core/Model/File/Validator/Image.php. Wydaje się, że łatka SUPEE-10415 nie uwzględnia modyfikacji dokonanej przez łatkę SUPEE-9767 (v1 lub v2)
wr125,

1
Poprawka dodana u dołu mojej odpowiedzi.
Jeroen Vermeulen - MageHost

1
Nie zgadzam się Wzięliśmy waniliową instalację z github.com/OpenMage/magento-mirror/archive/1.9.2.2.tar.gz i byliśmy w stanie zastosować łatki w następującej kolejności: SUPEE-7405-CE-1-9-2-2 | CE_1.9.2.2 | v1, SUPEE-7405 | CE_1.9.2.2 | wersja 1.1, SUPEE-7616 | CE_1.9.2.2-CE_1.8.0.0 | v1, SUPEE-8167 | EE_1.14.2.0 | v1, SUPEE-8788 | CE_1.9.2.2 | v2, SUPEE-8967 | EE_1.13.1.0 | v1, SUPEE-9652 | EE_1.14.3.1 | v1, PATCH_SUPEE-9767_CE_1.9.3.0_v2 | CE_1.9.3.0 | v2, SUPEE-10336_v1.14.2.4 | CE_1.9.2.4 | v1, SUPEE-10266-CE-1.9.2.4 | CE_1.9.2.4 | v1, SUPEE-10415-ce-1.9.2.2 | CE_1.9.2.2 | v1
Jeroen Vermeulen - MageHost

1
Musisz zastosować wszystkie poprzednie łaty, zobacz mój poprzedni komentarz. Przetestowałem to.
Jeroen Vermeulen - MageHost

4
Zamiast tego użyj SUPEE-10497, został on niedawno wydany, aby rozwiązać ten problem w wersji 1.9.1.1. Przeczytaj uwagi do wydania, ponieważ ta poprawka wymaga usunięcia SUPEE-10266 przed instalacją.
Piotr Kamiński

3

Oto pełny dziennik zmian i co rozumiem z tym dziennikiem zmian

I na które pliki miała wpływ wymieniona poniżej przyczyna

Escape Zmiana HTML

plik

app/code/core/Mage/Adminhtml/Block/Report/Review/Detail.php
app/code/core/Mage/Adminhtml/Block/Report/Tag/Product/Detail.php
app/code/core/Mage/Adminhtml/Block/Review/Add.php
app/code/core/Mage/Adminhtml/Block/Review/Edit/Form.php
app/code/core/Mage/Sales/Block/Adminhtml/Billing/Agreement/Grid.php
app/design/adminhtml/default/default/template/sales/billing/agreement/view/tab/info.phtml
app/design/adminhtml/default/default/template/xmlconnect/edit/tab/content.phtml
app/design/adminhtml/default/default/template/xmlconnect/edit/tab/design/image_edit.phtml
js/mage/adminhtml/backup.js

Dodaj DS zamiast „/”

app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php

dodano nowy plik

app/code/core/Zend/Form/Decorator/Form.php
lib/Varien/Filter/FormElementName.php

Kompletny plik zmian

app / code / core / Mage / Adminhtml / Model / System / Config / Backend / Filename.php

 class Mage_Adminhtml_Model_System_Config_Backend_Filename extends Mage_Core_Model_Config_Data
 {
+
+ /**
+ * Config path for system log file.
+ */
+ const DEV_LOG_FILE_PATH = 'dev/log/file';
+
+ /**
+ * Config path for exception log file.
+ */
+ const DEV_LOG_EXCEPTION_FILE_PATH = 'dev/log/exception_file';
+
+ /**
+ * Processing object before save data
+ *
+ * @return Mage_Adminhtml_Model_System_Config_Backend_Filename
+ * @throws Mage_Core_Exception
+ */
 protected function _beforeSave()
 {
- $value = $this->getValue();
- $value = basename($value);
+ $value = $this->getValue();
+ $configPath = $this->getPath();
+ $value = basename($value);
+
+ // if dev/log setting, validate log file extension.
+ if ($configPath == self::DEV_LOG_FILE_PATH || $configPath == self::DEV_LOG_EXCEPTION_FILE_PATH) {
+ if (!Mage::helper('log')->isLogFileExtensionValid($value)) {
+ throw Mage::exception('Mage_Core', Mage::helper('adminhtml')->__
+ ('Invalid file extension used for log file. Allowed file extensions: log, txt, html, csv'));
+ }
+ }
+
     $this->setValue($value);
     return $this;
 }

Dodano metodę getCacheId () i getServiceUrl ()

app/code/core/Mage/Api/Helper/Data.php

Dodano metodę unserialize ()

app/code/core/Mage/Core/Helper/String.php

Użyj metody getServiceUrl () utworzonej w app / code / core / Mage / Api / Helper / Data.php

app/code/core/Mage/Api/Model/Server/Adapter/Soap.php
app/code/core/Mage/Api/Model/Wsdl/Config/Base.php

Użyj metody getCacheId () utworzonej w app / code / core / Mage / Api / Helper / Data.php

app/code/core/Mage/Api/Model/Wsdl/Config.php

Zastosowano powyższą unserialize()metodę utworzoną w app / code / core / Mage / Core / Helper / String.php

app/code/core/Mage/Eav/Model/Entity/Attribute/Backend/Serialized.php
app/code/core/Mage/Rule/Model/Abstract.php

Zmiana komentarza

app/code/core/Mage/Core/Model/File/Validator/Image.php
app/code/core/Mage/Core/etc/system.xml

Komentarz dodany

app/code/core/Mage/Core/etc/config.xml

Dodano maksymalną długość hasła

app/code/core/Mage/Customer/Model/Customer.php

Dodano zezwolenie na rozszerzenie pliku // $ _ allowedFileExtensions = array ('log', 'txt', 'html', 'csv');

app/code/core/Mage/Log/Helper/Data.php

Nie wiem jaka zmiana

app/design/adminhtml/default/default/template/backup/dialogs.phtml

Lista problemów

SUPEE-10415 zapobiega kontroli kosza

otrzymaj kod błędu # 10415 w paypal in magento


1

Próbuję tego na Magento EE 1.13.0.2 i wydaje się, że ta łatka nie działa dobrze, jeśli zainstalowano SUPEE-6482.

Checking patch app/code/core/Mage/Api/Model/Server/Adapter/Soap.php...
error: while searching for:
            ->setUseSession(false);

        $wsdlUrl = $params !== null
            ? $urlModel->getUrl('*/*/*', array('_current' => true, '_query' => $params))
            : $urlModel->getUrl('*/*/*');

        if( $withAuth ) {
            $phpAuthUser = $this->getController()->getRequest()->getServer('PHP_AUTH_USER', false);

error: patch failed: app/code/core/Mage/Api/Model/Server/Adapter/Soap.php:205

SUPEE-6482 zmienił linię $phpAuthUserna

$phpAuthUser = rawurlencode($this->getController()->getRequest()->getServer('PHP_AUTH_USER', false));

Nie tylko $phpAuthUserlinia różniła się poprzednimi odstępami ->setUseSession(false);również była niepoprawna
DanCarlyon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.