Security Patch SUPEE-10752 - ปัญหาที่เป็นไปได้หรือไม่


14

แพทช์รักษาความปลอดภัยใหม่ออกมาสำหรับ Magento 1 โดยระบุปัญหา 25 APPSEC

https://magento.com/security/patches/supee-10752

ปัญหาทั่วไปที่คุณต้องระวังเมื่อใช้โปรแกรมแก้ไขนี้

SUPEE-10752, Magento Commerce 1.14.3.9 และ Open Source 1.9.3.9 มีการปรับปรุงความปลอดภัยหลายอย่างที่ช่วยปิดการเรียกใช้รหัสระยะไกล (RCE) ของผู้ดูแลระบบที่ผ่านการรับรองความถูกต้องการปลอมแปลงคำขอข้ามไซต์ (CSRF) และช่องโหว่อื่น ๆ

ข้อมูลเกี่ยวกับการเปลี่ยนแปลงทั้งหมดในรุ่น 1.14.3.9 และ 1.9.3.9 มีอยู่ในบันทึกประจำรุ่นของ Magento Commerce และ Magento Open Source

แพตช์และการอัปเกรดพร้อมใช้งานสำหรับ Magento รุ่นต่อไปนี้:

Magento Commerce 1.9.0.0-1.14.3.9: SUPEE-10752 หรืออัพเกรดเป็น Magento Commerce 1.14.3.9

Magento Open Source 1.5.0.0-1.9.3.9: SUPEE-10752 หรืออัพเกรดเป็น Magento Open Source 1.9.3.9


พบปัญหาที่มีรายละเอียดในที่นี้ - magento.stackexchange.com/questions/248229/…
Shrenik

คำตอบ:


19

ตามที่กล่าวไว้ในเอกสารอย่างเป็นทางการโดยMagento :

ความขัดแย้งระหว่างการติดตั้งแพตช์SUPEE-10752มักเกิดจากการติดตั้งแพตช์ก่อนหน้าเวอร์ชั่น 1 ( SUPEE-10570v1 )

โปรดตรวจสอบให้แน่ใจว่าได้ลบSUPEE-10570v1และติดตั้งSUPEE-10570v2ก่อนการติดตั้งSUPEE-10752 ใหม่


11

ไฟล์ด้านล่างมีการเปลี่ยนแปลง / สร้างขึ้นหลังจากนำ patch มาใช้

app/code/core/Mage/Admin/Model/User.php
app/code/core/Mage/Adminhtml/Block/Catalog/Product/Composite/Fieldset/Options.php
app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Option.php
app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Filter/Datetime.php
app/code/core/Mage/Adminhtml/Model/LayoutUpdate/Validator.php
app/code/core/Mage/Adminhtml/controllers/Catalog/CategoryController.php
app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php
app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php
app/code/core/Mage/Adminhtml/controllers/Cms/WysiwygController.php
app/code/core/Mage/Adminhtml/controllers/CustomerController.php
app/code/core/Mage/Adminhtml/controllers/System/StoreController.php
app/code/core/Mage/Catalog/Model/Product.php
app/code/core/Mage/Catalog/Model/Resource/Category/Tree.php
app/code/core/Mage/Checkout/Model/Api/Resource/Customer.php
app/code/core/Mage/Checkout/Model/Type/Onepage.php
app/code/core/Mage/Checkout/controllers/CartController.php
app/code/core/Mage/Core/Helper/Http.php
app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
app/code/core/Mage/Customer/Helper/Data.php
app/code/core/Mage/Customer/Model/Resource/Customer.php
app/code/core/Mage/Customer/controllers/AccountController.php
app/code/core/Mage/Log/Model/Visitor.php
app/code/core/Mage/Usa/Helper/Data.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Abstract/Backend/Abstract.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/Freemethod.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/OriginShipment.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/Type.php
app/code/core/Mage/Usa/etc/system.xml
app/code/core/Zend/Filter/PregReplace.php
app/code/core/Zend/Validate/EmailAddress.php
app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option.phtml

app/design/adminhtml/default/default/template/system/shipping/ups.phtml
app/design/frontend/base/default/template/downloadable/catalog/product/links.phtml
app/design/frontend/base/default/template/downloadable/checkout/cart/item/default.phtml
app/design/frontend/base/default/template/downloadable/checkout/onepage/review/item.phtml
app/design/frontend/base/default/template/downloadable/sales/order/items/renderer/downloadable.phtml
app/design/frontend/rwd/default/template/downloadable/checkout/cart/item/default.phtml
app/design/frontend/rwd/default/template/downloadable/checkout/onepage/review/item.phtml
app/design/frontend/rwd/default/template/downloadable/sales/order/items/renderer/downloadable.phtml
app/locale/en_US/Mage_Catalog.csv
app/locale/en_US/Mage_Usa.csv
cron.php
js/tiny_mce/plugins/media/.htaccess
lib/Varien/Image/Adapter/Gd2.php

สำหรับ EE Edition ไฟล์ด้านล่างจะถูกเพิ่มเข้าไปนอกเหนือจาก CE

app/code/core/Enterprise/CatalogEvent/Block/Adminhtml/Event/Grid.php
app/code/core/Enterprise/GiftRegistry/Block/Adminhtml/Giftregistry/Edit/Attribute/Attribute.php
app/code/core/Enterprise/GiftRegistry/Model/Attribute/Processor.php
app/code/core/Enterprise/Invitation/Block/Adminhtml/Invitation/Grid.php
app/code/core/Enterprise/Logging/Block/Adminhtml/Details/Renderer/Diff.php
app/code/core/Enterprise/Reward/Block/Adminhtml/Customer/Edit/Tab/Reward/History/Grid/Column/Renderer/Reason.php
app/code/core/Enterprise/TargetRule/Model/Rule.php
app/code/core/Enterprise/TargetRule/controllers/Adminhtml/TargetruleController.php
app/design/adminhtml/default/default/template/enterprise/cms/page/revision/info.phtml

app/design/frontend/enterprise/default/template/cms/hierarchy/pagination.phtml
app/design/frontend/enterprise/iphone/template/downloadable/checkout/cart/item/default.phtml
app/design/frontend/enterprise/iphone/template/downloadable/checkout/onepage/review/item.phtml
app/design/frontend/rwd/enterprise/template/cms/hierarchy/pagination.phtml

app / รหัส / core / Mage / ธุรการ / รุ่น / User.php

+            $sessionUser = $this->getSession()->getUser();
+            if ($sessionUser && $sessionUser->getId() == $this->getId()) {
+                $this->getSession()->setUserPasswordChanged(true);
+            }


+    /**
+     * @return Mage_Admin_Model_Session
+     */
+    protected function getSession()
+    {
+        return  Mage::getSingleton('admin/session');
+    }
+

app / รหัส / core / Mage / Adminhtml / บล็อก / เครื่องมือ / ตาราง / คอลัมน์ / กรอง / Datetime.php

                     $this->getLocale()->getDateTimeFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT)
                 );
             }
-            return $value;
+            return $this->escapeHtml($value);
         }

-        return parent::getEscapedValue($index);
+        return $this->escapeHtml(parent::getEscapedValue($index));
     }
-
 }

app / รหัส / core / Mage / Adminhtml / ควบคุม / แคตตาล็อก / CategoryController.php

+            if (isset($data['general']['path'])) {
+                unset($data['general']['path']);
+            }

app / รหัส / core / Mage / Adminhtml / ควบคุม / แคตตาล็อก / ProductController.php

+                $product->validate();

app / รหัส / core / Mage / Adminhtml / ควบคุม / ซม / WYSIWYG / ImagesController.php

+            $this->getResponse()->setHeader('Content-type', $image->getMimeTypeWithOutFileType());

app / รหัส / core / Mage / Adminhtml / ควบคุม / ซม / WysiwygController.php

+        $this->getResponse()->setHeader('Content-type', $image->getMimeTypeWithOutFileType());

app / รหัส / core / Mage / Adminhtml / ควบคุม / CustomerController.php

+                    $customer->setPasswordCreatedAt(time());

app / รหัส / core / Mage / Adminhtml / ควบคุม / ระบบ / StoreController.php

+   /**
+     * Controller predispatch method
+     *
+     * @return Mage_Adminhtml_Controller_Action
+     */
+    public function preDispatch()
+    {
+        $this->_setForcedFormKeyActions(array('deleteWebsitePost', 'deleteGroupPost', 'deleteStorePost'));
+        return parent::preDispatch();
+    }

app / รหัส / core / Mage / แคตตาล็อก / รุ่น / Product.php

+                        if (!empty($option['file_extension'])) {
+                            $fileExtension = $option['file_extension'];
+                            if (0 !== strcmp($fileExtension, Mage::helper('core')->removeTags($fileExtension))) {
+                                Mage::throwException(Mage::helper('catalog')->__('Invalid custom option(s).'));
+                            }
+                        }

app / รหัส / core / Mage / แคตตาล็อก / รุ่น / ทรัพยากร / ประเภท / Tree.php

+            if (!preg_match("#^[0-9\/]+$#", $item['path'])) {
+                $item['path'] = '';
+            }

app / รหัส / core / Mage / ชำระเงิน / รุ่น / Api / ทรัพยากร / Customer.php

+        $customer->setPasswordCreatedAt(time());

ทุกคนแทนที่ไฟล์ onepage.php โปรดอัปเดตไฟล์

app / รหัส / core / Mage / ชำระเงิน / รุ่น / ประเภท / Onepage.php

  +        $passwordCreatedTime = $this->_checkoutSession->getData('_session_validator_data')['session_expire_timestamp']
    +            - Mage::getSingleton('core/cookie')->getLifetime();
    +        $customer->setPasswordCreatedAt($passwordCreatedTime);

เพื่อการตรวจสอบความถูกต้องของคีย์โปรดตรวจสอบแบบฟอร์มรถเข็นของคุณว่ามีแบบฟอร์ม

app / รหัส / core / Mage / ชำระเงิน / ควบคุม / CartController.php

+        if (!$this->_validateFormKey()) {
+            $this->_redirect('*/*/');
+            return;
+        }
+

app / รหัส / core / Mage / core / ผู้ช่วย / Http.php

-                if ($this->_getRequest()->getServer($var, false)) {
+                if ($var != 'REMOTE_ADDR' && $this->_getRequest()->getServer($var, false)) {

+        if (strpos($this->_remoteAddr, ',') !== false) {
+            $ipList = explode(',', $this->_remoteAddr);
+            $this->_remoteAddr = trim(reset($ipList));
+        }
+

app / รหัส / core / Mage / หลัก / รุ่น / ครั้ง / Abstract / Varien.php

+    const VALIDATOR_PASSWORD_CREATE_TIMESTAMP   = 'password_create_timestamp';

+    /**
+     * Use password creation timestamp in validator key
+     *
+     * @return bool
+     */
+    public function useValidateSessionPasswordTimestamp()
+    {
+        return true;
+    }
+

+        if ($this->useValidateSessionPasswordTimestamp()
+            && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
+            && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
+            && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
+            > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
+        ) {
+            return false;
+        }

+        if (isset($this->_data['visitor_data']['customer_id'])) {
+            $parts[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP] =
+                Mage::helper('customer')->getPasswordTimestamp($this->_data['visitor_data']['customer_id']);
+        }
+

app / รหัส / core / Mage / ลูกค้า / ผู้ช่วย / Data.php

+    /**
+     * Get customer password creation timestamp or customer account creation timestamp
+     *
+     * @param $customerId
+     * @return int
+     */
+    public function getPasswordTimestamp($customerId)
+    {
+        /** @var $customer Mage_Customer_Model_Customer */
+        $customer = Mage::getModel('customer/customer')
+            ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
+            ->load((int)$customerId);
+        $passwordCreatedAt = $customer->getPasswordCreatedAt();
+
+        return is_null($passwordCreatedAt) ? $customer->getCreatedAtTimestamp() : $passwordCreatedAt;
+    }
+

app / รหัส / core / Mage / ลูกค้า / รุ่น / ทรัพยากร / Customer.php

-        $customer->setPassword($newPassword);
+        $customer->setPassword($newPassword)->setPasswordCreatedAt(time());
+        $this->saveAttribute($customer, 'password_created_at');
app/code/core/Mage/Customer/controllers/AccountController.php

+                $customer->setPasswordCreatedAt(time());



-        if (!$this->getCustomerId() && $customer = $observer->getEvent()->getCustomer()) {
+        if ($customer = $observer->getEvent()->getCustomer()) {

> app/code/core/Mage/Log/Model/Visitor.php

    -        if (!$this->getCustomerId() && $customer = $observer->getEvent()->getCustomer()) {
    +        if ($customer = $observer->getEvent()->getCustomer()) {

app / รหัส / core / Mage / USA / ผู้ช่วย / Data.php

+
+    /**
+     * Validate ups type value
+     *
+     * @param $valueForCheck string ups type value for check
+     *
+     * @return bool
+     */
+    public function validateUpsType($valueForCheck) {
+        $result = false;
+        $sourceModel = Mage::getSingleton('usa/shipping_carrier_ups_source_type');
+        foreach ($sourceModel->toOptionArray() as $allowedValue) {
+            if (isset($allowedValue['value']) && $allowedValue['value'] == $valueForCheck) {
+                $result = true;
+                break;
+            }
+        }
+        return $result;
+    }
 }

cron.php

cron.php: ตัวจัดการข้อยกเว้นในไฟล์ cron.php

-Mage::app('admin')->setUseSessionInUrl(false);
+try {
+    Mage::app('admin')->setUseSessionInUrl(false);
+} catch (Exception $e) {
+    Mage::printException($e);
+    exit;
+}

lib / Varien / ภาพ / อะแดปเตอร์ / Gd2.php

GD2: คืนค่าประเภท mime จริง

+        header("Content-type: ".$this->getMimeTypeWithOutFileType());

+
+    /**
+     * Gives real mime-type with not considering file type field
+     *
+     * @return string
+     */
+    public function getMimeTypeWithOutFileType()
+    {
+        return $this->_fileMimeType;
+    }
 }

js / tiny_mce / plugins / สื่อ / .htaccess

หากคุณใช้ nginx แทน Apache ต้องแน่ใจว่าคุณอัพเดตการกำหนดค่าของคุณเพื่อทำซ้ำการเปลี่ยนแปลงนี้

+<IfModule mod_rewrite.c>
+    <Files moxieplayer.swf>
+        RewriteEngine on
+        RewriteCond %{QUERY_STRING} !^$
+        RewriteRule ^(.*)$ %{REQUEST_URI}? [R=301,L]
+    </Files>
+</IfModule>

app / ออกแบบ / adminhtml / default / default / แม่แบบ / ระบบ / การจัดส่งสินค้า / ups.phtml

+if (!in_array($storedOriginShipment, array_keys($orShipArr))) {
+    $storedOriginShipment = '';
+}

+if ($storedFreeShipment != '' && !in_array($storedFreeShipment, array_keys($defShipArr))) {
+    $storedFreeShipment = '';
+}

+if (!Mage::helper('usa')->validateUpsType($storedUpsType)) {
+    $storedUpsType = '';
+}

วิธีการจัดส่งไฟล์ที่เพิ่ม / อัพเดทใหม่คือ

app/code/core/Mage/Usa/Helper/Data.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Abstract/Backend/Abstract.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/Freemethod.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/OriginShipment.php
app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/Type.php

ไฟล์ Escapehtml:

ไฟล์ส่วนหน้าของผลิตภัณฑ์ที่สามารถดาวน์โหลดได้: ทุกคนที่ใช้ผลิตภัณฑ์ที่สามารถดาวน์โหลดได้โปรดอัปเดตไฟล์ในไฟล์ธีมของคุณ

app / ออกแบบ / ส่วนหน้า / ฐาน / default / แม่แบบ / ดาวน์โหลด / แคตตาล็อกสินค้า / / links.phtml

ตรวจสอบรหัส

<dt><label<?php if ($_isRequired) echo ' class="required"' ?>><?php if ($_isRequired) echo '<em>*</em>' ?><?php echo
    > $this->getLinksTitle() ?></label></dt>

แทนที่ด้วย

<dt><label<?php if ($_isRequired) echo ' class="required"' ?>><?php if ($_isRequired) echo '<em>*</em>' ?><?php echo
    > $this->escapeHtml($this->getLinksTitle()); ?></label></dt>

app / ออกแบบ / ส่วนหน้า / ฐาน / default / แม่แบบ / ดาวน์โหลด / ชำระเงิน / รถเข็น / รายการ / default.phtml

ตรวจสอบรหัส

<dt><?php echo $this->getLinksTitle() ?></dt>

แทนที่ด้วย

 <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app / ออกแบบ / ส่วนหน้า / ฐาน / default / แม่แบบ / ดาวน์โหลด / ขาย / การสั่งซื้อ / รายการ / renderer / downloadable.phtml

ตรวจสอบรหัส

<dt><?php echo $this->getLinksTitle() ?></dt>

แทนที่ด้วย

<dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app / ออกแบบ / ส่วนหน้า / default / iPhone / แม่แบบ / ดาวน์โหลด / ชำระเงิน / รถเข็น / รายการ / default.phtml

ตรวจสอบรหัส

<dt><?php echo $this->getLinksTitle() ?></dt>

แทนที่ด้วย

<dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

แอพ / ออกแบบ / ส่วนหน้า / ค่าเริ่มต้น / iphone / แม่แบบ / ดาวน์โหลด / เช็คเอาต์ / onepage / review / item.phtml ตรวจสอบรหัส

`<dt><?php echo $this->getLinksTitle() ?></dt>`

แทนที่ด้วย

`<dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>`

แอป / ออกแบบ / ส่วนหน้า / rwd / ค่าเริ่มต้น / แม่แบบ / ดาวน์โหลด / ชำระเงิน / รถเข็น / รายการ / default.phtml ตรวจสอบรหัส

`<dt><?php echo $this->getLinksTitle() ?></dt>`

แทนที่ด้วย

`<dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>`

app / ออกแบบ / ส่วนหน้า / RWD / default / แม่แบบ / ดาวน์โหลด / ชำระเงิน / onepage / ทบทวน / item.phtml

ตรวจสอบรหัส

<dt><?php echo $this->getLinksTitle() ?></dt>

แทนที่ด้วย

<dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app / ออกแบบ / ส่วนหน้า / RWD / default / แม่แบบ / ดาวน์โหลด / ขาย / การสั่งซื้อ / รายการ / renderer / downloadable.phtml

ตรวจสอบรหัส

<dt><?php echo $this->getLinksTitle() ?></dt>

แทนที่ด้วย

<dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

ไฟล์ Escapehtml อื่น ๆ :

app / รหัส / core / Mage / Adminhtml / บล็อก / Catalog / สินค้า / คอมโพสิต / fieldset / Options.php

+        if (!empty($option['file_extension'])) {
+            $option['file_extension'] = $this->escapeHtml($option['file_extension']);
+        }

app / รหัส / core / Mage / Adminhtml / บล็อก / Catalog / สินค้า / แก้ไข / แท็บ / ตัวเลือก / Option.php

-                    $value['file_extension'] = $option->getFileExtension();
+                    $value['file_extension'] = $this->escapeHtml($option->getFileExtension());

app / ออกแบบ / ส่วนหน้า / องค์กร / default / แม่แบบ / ซ.ม. / ลำดับชั้น / pagination.phtml

-    <li><a title="<?php echo $this->escapeHtml($node->getLabel())?>" href="<?php echo $node->getUrl()?>"><?php echo $this->getNodeLabel($node)?></a></li>

+    <li><a title="<?php echo $this->escapeHtml($node->getLabel())?>" href="<?php echo $node->getUrl()?>"><?php echo $this->escapeHtml($this->getNodeLabel($node)); ?></a></li>

ในแอป / รหัส / core / Mage / Checkout / controllers / CartController.php หน้าไหนในการชำระเงินคุณมักจะเห็นข้อผิดพลาดของคีย์ฟอร์ม
ไอคอน

1
ฉันไม่เห็นข้อผิดพลาดที่สำคัญในรูปแบบใด ๆ ถ้ามีคนแทนที่ไฟล์ / template / checkout / cart.phtml ที่เป็นค่าเริ่มต้นและ formkey ที่ไม่ได้รับ มันจะผ่านการเปลี่ยนเส้นทางหน้าแรกไม่ผ่านข้อผิดพลาด มันเป็นรายการตรวจสอบ หากมีข้อผิดพลาดเกิดขึ้นโปรดตรวจสอบรหัสฟอร์ม :) ขอขอบคุณสำหรับการถามคำถาม :)
พระราม Chandran M

1
ฉันไม่คิดว่ามันมีประโยชน์มากในการโพสต์แพตช์ทั้งหมดที่นี่ ฉันสนใจปัญหาที่เป็นไปได้จริงมากขึ้น ...
7ochem

1
ขอบคุณสำหรับความคิดเห็นของคุณ ฉันรู้สึกว่ามันมีประโยชน์สำหรับคนอื่น ๆ เพราะมันง่ายที่จะค้นหาไฟล์ที่มีการเปลี่ยนแปลงและอะไรคือการเปลี่ยนแปลงรหัสหลัก ตัวอย่างแอป / การออกแบบ / ส่วนหน้า / rwd / ค่าเริ่มต้น / แม่แบบ / ดาวน์โหลด / เช็คเอาต์ / onepage / review / item.phtml สมมติว่าเราแทนที่ในชุดรูปแบบของคุณเพียงแค่เปลี่ยนรหัส easiy และมันเป็นเหมือนรายการตรวจสอบ
Rama Chandran

8

การดัดแปลงfilterวิธีโอเวอร์โหลดในZend_Filter_PregReplaceไร้เดียงสาและถือว่า$this->_matchPatternเป็นสตริงเสมอ preg_replaceสถานที่ให้บริการนี้มีให้ต่อมาเป็นอาร์กิวเมนต์แรก ในความเป็นจริงอาร์เรย์ยังเป็นอาร์กิวเมนต์ที่ถูกต้องสมบูรณ์ ความจริงเรื่องนี้ถูกใช้จริงโดยZend_Filterคลาสหลักหลายคลาส (เช่นZend_Filter_Word_SeparatorToCamelCase) ดังนั้นส่วนขยายใด ๆ / สาขาของรหัสที่ใช้ตัวกรองนี้หรือหนึ่งมันอนุพันธ์มีอาร์กิวเมนต์อาร์เรย์จะเริ่มขว้างปา_matchPatternWarning: substr() expects parameter 1 to be a string, array given

ตัวอย่างที่หยาบคายในสิ่งที่ควรทำจะเป็นบางสิ่งตามแนวของ:

/**
 * Perform regexp replacement as filter
 *
 * @param  string $value
 * @return string
 */
public function filter($value)
{
    if ($this->_matchPattern == null) {
        #require_once 'Zend/Filter/Exception.php';
        throw new Zend_Filter_Exception(get_class($this) . ' does not have a valid MatchPattern set.');
    }

    $patterns = is_array($this->_matchPattern) ? $this->_matchPattern : array($this->_matchPattern);
    foreach ($patterns as $pattern) {
        if ($this->_containsEvalModifier($pattern)) {
            throw new Zend_Filter_Exception(get_class($this) . ' uses deprecated modifier "/e".');
        }
    }

    return preg_replace($this->_matchPattern, $this->_replacement, $value);
}

/**
 * Check if the modifiers contains the eval flag.
 *
 * @param  string $value
 * @return bool
 */
protected function _containsEvalModifier($pattern)
{
    $firstDelimiter = substr($pattern, 0, 1);
    $partsOfRegex = explode($firstDelimiter, $pattern);
    $modifiers = array_pop($partsOfRegex);

    return ($modifiers != str_replace('e', '', $modifiers));
}

แม้ว่าฉันจะยังไม่ทำการทดสอบอย่างละเอียดเกี่ยวกับเรื่องนี้

แก้ไข: มันน่าสังเกตว่าในขณะที่การแก้ปัญหาที่เสนอข้างต้นควรป้องกันข้อผิดพลาดการใช้งานยังคงเป็นทางเทคนิคที่ไร้เดียงสาและมีแนวโน้มที่จะเป็นบวกเท็จ มันถือว่าตัวคั่น regex ที่แยกรูปแบบจากตัวดัดแปลงนั้นเหมือนกับตัวเริ่มต้นของสตริง ในทางเทคนิคแล้วไม่จำเป็นต้องเป็นเช่นนี้เพราะ PHP รองรับตัวคั่นลักษณะวงเล็บหลายแบบ ดังนั้นอินพุตที่ถูกต้อง{hello}isจะพิจารณาว่าตัวปรับเปลี่ยนนั้นคืออะไรhello}is(แทนที่จะเป็นตัวดัดแปลงจริงของis) และดังนั้นจะทำให้เกิดข้อยกเว้นแม้ว่ารูปแบบนั้นจะไม่รวมeตัวดัดแปลง


5

1.7.0.2 เวอร์ชันปัญหา: หลังจากติดตั้งแพตช์และไปที่การชำระเงินหนึ่งหน้า (การชำระเงินแบบทั่วไป), รับข้อผิดพลาดนี้

ข้อผิดพลาดในการแยกวิเคราะห์: ข้อผิดพลาดทางไวยากรณ์ที่ไม่คาดคิด

app / code / core / Mage / Checkout / รุ่น / Type / Onepage.php ที่บรรทัด 691

การย้อนกลับแพตช์ข้อผิดพลาดจะหายไป

เมื่อมองลึกลงไปในคำถามนี้ฉันพบว่าแพตช์ได้เพิ่มบรรทัดต่อไปนี้ในไฟล์ onepage.php

$passwordCreatedTime = $this->_checkoutSession->getData('_session_validator_data')['session_expire_timestamp']
            - Mage::getSingleton('core/cookie')->getLifetime();
        $customer->setPasswordCreatedAt($passwordCreatedTime);

การแก้ไข:ขอบคุณ @FabianSchmengler

อัปเดตเป็น PHP เวอร์ชัน 5.4 ขึ้นไป!


ฉันยังใช้โปรแกรมแก้ไขต้นฉบับมันจะเป็น $ passwordCreatedTime = $ this -> _ checkoutSession-> getData ('_ session_validator_data') ['session_expire_timestamp'] - Mage :: getSingleton ('core / cookie') -> getLifTime (); บรรทัดถัดไป (สร้าง / เพิ่มบรรทัดใหม่) - Mage :: getSingleton ('หลัก / คุกกี้') -> getLifetime (); สร้างสาเหตุของปัญหา
Rama Chandran M

@ RamaChandranM อ๋อ! คุณได้รับข้อผิดพลาด PARSE เดียวกันหรือไม่ รุ่นไหนที่คุณใช้?
ไอคอน

1
ใช่ฉันจะตรวจสอบโครงการอื่นและให้รายละเอียดมากขึ้น Ans :)
พระราม Chandran M

2
@Icon มีแพทช์สำหรับความเข้ากันได้กับ PHP 5.4 ฉันไม่ได้ติดตั้ง 1.7 ใด ๆ เป็นเวลานาน แต่คาดว่ามันจะทำงานบน 5.6 เช่นกันลองดู
เฟเบียน Schmengler

1
@icon คุณสามารถเพิกเฉยต่อการบอกเลิกได้ในขณะนี้สิ่งนี้จะเกี่ยวข้องเมื่อคุณอัปเดตเป็น PHP 7
Fabian Schmengler

2

ปัญหาที่ทราบ: -

หากรหัสหรือส่วนขยายที่กำหนดเองของคุณใช้Zend/Filter/PregReplace.php กับโมเดอเรเตอร์ e ตอนนี้จะส่งคืนข้อผิดพลาดเนื่องจากปัญหา RCE ที่เป็นไปได้

โปรแกรมปรับปรุงนี้ตามด้านล่างความปลอดภัย

1) การเปลี่ยนรหัสผ่านการตรวจสอบความถูกต้องของเซสชั่นผู้ดูแลระบบ

+++ app/code/core/Mage/Admin/Model/User.php

+            $sessionUser = $this->getSession()->getUser();
+            if ($sessionUser && $sessionUser->getId() == $this->getId()) {
+                $this->getSession()->setUserPasswordChanged(true);
+            }

แล้ว

+    /**
+     * @return Mage_Admin_Model_Session
+     */
+    protected function getSession()
+    {
+        return  Mage::getSingleton('admin/session');
+    }
+

class Mage_Admin_Model_User

+        $oldPassword = $this->getPassword();
     $this->setId(null);
     $this->load($id);
+        $isUserPasswordChanged = $this->getSession()->getUserPasswordChanged();
+        if ($this->getPassword() !== $oldPassword && !$isUserPasswordChanged) {
+            $this->setId(null);
+        } elseif ($isUserPasswordChanged) {
+            $this->getSession()->setUserPasswordChanged(false);
+        }

2) การตรวจสอบความถูกต้องของนามสกุลไฟล์

app/code/core/Mage/Adminhtml/Block/Catalog/Product/Composite/Fieldset/Options.php

+        if (!empty($option['file_extension'])) {
+            $option['file_extension'] = $this->escapeHtml($option['file_extension']);
+        }

app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Option.php app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Option.php

-                    $value['file_extension'] = $option->getFileExtension();
+                    $value['file_extension'] = $this->escapeHtml($option->getFileExtension());

app/code/core/Mage/Catalog/Model/Product.php

+                        if (!empty($option['file_extension'])) {
+                            $fileExtension = $option['file_extension'];
+                            if (0 !== strcmp($fileExtension, Mage::helper('core')->removeTags($fileExtension))) {
+                                Mage::throwException(Mage::helper('catalog')->__('Invalid custom option(s).'));
+                            }
+                        }

3) Escape Html ถูกเพิ่มสำหรับ XSS

+++ app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Filter/Datetime.php

-            return $value;
+            return $this->escapeHtml($value);
     }

-        return parent::getEscapedValue($index);
+        return $this->escapeHtml(parent::getEscapedValue($index));

app/design/frontend/base/default/template/downloadable/catalog/product/links.phtml

-        <dt><label<?php if ($_isRequired) echo ' class="required"' ?>><?php if ($_isRequired) echo '<em>*</em>' ?><?php echo $this->getLinksTitle() ?></label></dt>
+        <dt><label<?php if ($_isRequired) echo ' class="required"' ?>><?php if ($_isRequired) echo '<em>*</em>' ?><?php echo $this->escapeHtml($this->getLinksTitle()); ?></label></dt>

app/design/frontend/base/default/template/downloadable/checkout/cart/item/default.phtml

-            <dt><?php echo $this->getLinksTitle() ?></dt>
+            <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app/design/frontend/base/default/template/downloadable/checkout/onepage/review/item.phtml

-            <dt><?php echo $this->getLinksTitle() ?></dt>
+            <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app/design/frontend/base/default/template/downloadable/sales/order/items/renderer/downloadable.phtml

-            <dt><?php echo $this->getLinksTitle() ?></dt>
+            <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app/design/frontend/default/iphone/template/downloadable/checkout/onepage/review/item.phtml

-                <dt><?php echo $this->getLinksTitle() ?></dt>
+                <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app/design/frontend/rwd/default/template/downloadable/checkout/cart/item/default.phtml

-            <dt><?php echo $this->getLinksTitle() ?></dt>
+            <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app/design/frontend/rwd/default/template/downloadable/checkout/onepage/review/item.phtml

-            <dt><?php echo $this->getLinksTitle() ?></dt>
+            <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

app/design/frontend/rwd/default/template/downloadable/sales/order/items/renderer/downloadable.phtml

-            <dt><?php echo $this->getLinksTitle() ?></dt>
+            <dt><?php echo $this->escapeHtml($this->getLinksTitle()); ?></dt>

4) การแสดงออก XPath สำหรับการตรวจสอบการปรับปรุงเค้าโครง

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

+    /**
+     * XPath expression for checking layout update
+     *
+     * @var array
+     */
+    protected $_disallowedXPathExpressions = array(
+        '*//template',
+        '*//@template',
+        '//*[@method=\'setTemplate\']',
+        '//*[@method=\'setDataUsingMethod\']//*[text() = \'template\']/../*'
+    );
+

Mage_Adminhtml_Model_LayoutUpdate_Validator

-        if ($templatePaths = $value->xpath('*//template | *//@template | //*[@method=\'setTemplate\']/*')) {
+        if ($templatePaths = $value->xpath($this->_getXpathValidationExpression())) {

Mage_Adminhtml_Model_LayoutUpdate_Validator

+    /**
+     * Returns xPath for validate incorrect path to template
+     *
+     * @return string xPath for validate incorrect path to template
+     */
+    protected function _getXpathValidationExpression() {
+        return implode(" | ", $this->_disallowedXPathExpressions);
+    }
+



+    /**
+     * Returns xPath for validate incorrect path to template
+     *
+     * @return string xPath for validate incorrect path to template
+     */
+    protected function _getXpathValidationExpression() {
+        return implode(" | ", $this->_disallowedXPathExpressions);
+    }
+

app/code/core/Mage/Catalog/Model/Resource/Category/Tree.php

+            if (!preg_match("#^[0-9\/]+$#", $item['path'])) {
+                $item['path'] = '';
+            }

5) SQL Injection ที่ผ่านการรับรองความถูกต้องเมื่อบันทึกหมวดหมู่

app/code/core/Mage/Adminhtml/controllers/Catalog/CategoryController

+            if (isset($data['general']['path'])) {
+                unset($data['general']['path']);
+            }

6) ตรวจสอบสินค้า app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php

+                $product->validate();

7) ชนิดของไฟล์ app/code/core/Mage/Adminhtml/controllers/Cms/Wysiwyg/ImagesController.php

+            $this->getResponse()->setHeader('Content-type', $image->getMimeTypeWithOutFileType());

app/code/core/Mage/Adminhtml/controllers/Cms/WysiwygController.php

+        $this->getResponse()->setHeader('Content-type', $image->getMimeTypeWithOutFileType());

lib/Varien/Image/Adapter/Gd2.php

-        header("Content-type: ".$this->getMimeType());
+        header("Content-type: ".$this->getMimeTypeWithOutFileType());


+
+    /**
+     * Gives real mime-type with not considering file type field
+     *
+     * @return string
+     */
+    public function getMimeTypeWithOutFileType()
+    {
+        return $this->_fileMimeType;
+    }

8) สร้าง Passsword ลูกค้าแล้ว app/code/core/Mage/Adminhtml/controllers/CustomerController.php

+                    $customer->setPasswordCreatedAt(time());

app/code/core/Mage/Checkout/Model/Api/Resource/Customer.php

+        $customer->setPasswordCreatedAt(time());

app/code/core/Mage/Checkout/Model/Type/Onepage.php

+        $passwordCreatedTime = $this->_checkoutSession->getData('_session_validator_data')['session_expire_timestamp']
+            - Mage::getSingleton('core/cookie')->getLifetime();
+        $customer->setPasswordCreatedAt($passwordCreatedTime);

app/code/core/Mage/Core/Model/Session/Abstract/Varien.php

+    const VALIDATOR_PASSWORD_CREATE_TIMESTAMP   = 'password_create_timestamp';


+    /**
+     * Use password creation timestamp in validator key
+     *
+     * @return bool
+     */
+    public function useValidateSessionPasswordTimestamp()
+    {
+        return true;
+    }


+        if ($this->useValidateSessionPasswordTimestamp()
+            && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
+            && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
+            && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
+            > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
+        ) {
+            return false;
+        }

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

+    /**
+     * Get customer password creation timestamp or customer account creation timestamp
+     *
+     * @param $customerId
+     * @return int
+     */
+    public function getPasswordTimestamp($customerId)
+    {
+        /** @var $customer Mage_Customer_Model_Customer */
+        $customer = Mage::getModel('customer/customer')
+            ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
+            ->load((int)$customerId);
+        $passwordCreatedAt = $customer->getPasswordCreatedAt();
+
+        return is_null($passwordCreatedAt) ? $customer->getCreatedAtTimestamp() : $passwordCreatedAt;
+    }
+

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

-        $customer->setPassword($newPassword);
+        $customer->setPassword($newPassword)->setPasswordCreatedAt(time());
     $this->saveAttribute($customer, 'password_hash');
+        $this->saveAttribute($customer, 'password_created_at');

app/code/core/Mage/Customer/controllers/AccountController.php

+                $customer->setPasswordCreatedAt(time());

Mage_Customer_AccountController

+            $customer->setPasswordCreatedAt(time());
         $customer->save();

``

+                $customer->setPasswordCreatedAt(time());

app/code/core/Mage/Log/Model/Visitor.php

-        if (!$this->getCustomerId() && $customer = $observer->getEvent()->getCustomer()) {
+        if ($customer = $observer->getEvent()->getCustomer()) {

9) การเปลี่ยนแปลงของ UPS

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

+
+    /**
+     * Validate ups type value
+     *
+     * @param $valueForCheck string ups type value for check
+     *
+     * @return bool
+     */
+    public function validateUpsType($valueForCheck) {
+        $result = false;
+        $sourceModel = Mage::getSingleton('usa/shipping_carrier_ups_source_type');
+        foreach ($sourceModel->toOptionArray() as $allowedValue) {
+            if (isset($allowedValue['value']) && $allowedValue['value'] == $valueForCheck) {
+                $result = true;
+                break;
+            }
+        }
+        return $result;
+    }

เพิ่มไฟล์สำหรับ UPS

`app/code/core/Mage/Usa/Model/Shipping/Carrier/Abstract/Backend/Abstract.php` 
`app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/Freemethod.php`
`app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/OriginShipment.php`
`app/code/core/Mage/Usa/Model/Shipping/Carrier/Ups/Backend/Type.php`

เพิ่มการตั้งค่าสำหรับฟังก์ชั่นใหม่นี้

app/code/core/Mage/Usa/etc/system.xml

+                            <backend_model>usa/shipping_carrier_ups_backend_freemethod</backend_model>

843 บรรทัด

+                            <backend_model>usa/shipping_carrier_ups_backend_originShipment</backend_model>

886

+                            <backend_model>usa/shipping_carrier_ups_backend_type</backend_model>

app/design/adminhtml/default/default/template/system/shipping/ups.phtml

+if (!in_array($storedOriginShipment, array_keys($orShipArr))) {
+    $storedOriginShipment = '';
+}
+if ($storedFreeShipment != '' && !in_array($storedFreeShipment, array_keys($defShipArr))) {
+    $storedFreeShipment = '';
+}
+if (!Mage::helper('usa')->validateUpsType($storedUpsType)) {
+    $storedUpsType = '';
+}
 ?>

10) เพิ่มคลาส Zend

`app/code/core/Zend/Filter/PregReplace.php`
`app/code/core/Zend/Validate/EmailAddress.php`

1> 1) การตรวจสอบความถูกต้องของผลิตภัณฑ์บันเดิล

app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option.phtml

+    <?php $_selection->setSku($this->escapeHtml($_selection->getSku())); ?>

12) เซสชั่นผู้ดูแลระบบในลอง catch ใน cron.php

-Mage::app('admin')->setUseSessionInUrl(false);
+try {
+    Mage::app('admin')->setUseSessionInUrl(false);
+} catch (Exception $e) {
+    Mage::printException($e);
+    exit;
+}

2

ดูเหมือนว่าส่วนหนึ่งของแพทช์กำลัง htmlEscaping "getLinksTitle ()" ทั้งหมด แต่พวกเขาลืมไฟล์ต่อไปนี้ (นี่เป็นพื้นฐานของ 1.8.1)

app/design/frontend/base/default/template/downloadable/checkout/multishipping/item/downloadable.phtml

app/design/frontend/base/default/template/downloadable/email/order/items/creditmemo/downloadable.phtml

app/design/frontend/base/default/template/downloadable/email/order/items/invoice/downloadable.phtml

app/design/frontend/base/default/template/downloadable/email/order/items/order/downloadable.phtml

app/design/frontend/base/default/template/downloadable/sales/order/creditmemo/items/renderer/downloadable.phtml

app/design/frontend/base/default/template/downloadable/sales/order/invoice/items/renderer/downloadable.phtml

app/design/frontend/default/iphone/template/downloadable/sales/order/creditmemo/items/renderer/downloadable.phtml

app/design/frontend/default/iphone/template/downloadable/sales/order/invoice/items/renderer/downloadable.phtml

2

Patch ไม่ทำงานกับ Vanilla Magento CE 1.8.0.0

อัปเดต: เพิ่มโซลูชันด้านล่าง

ปัญหา:

file app/design/frontend/base/default/template/downloadable/sales/order/items/renderer/downloadable.phtml
Hunk #1 FAILED at 54.

นำไปใช้กับแพทช์ก่อนหน้า:

  • AppSec-212
  • สุภี-2619
  • สุภี-2725
  • สุภี-3941
  • สุภี-5344
  • สุภี-5994
  • สุภี-6237
  • สุภี-6285
  • สุภี-6482
  • สุภี-6788
  • สุภี-7405
  • สุภี-7405v.1.1
  • สุภี-7616
  • สุภี-8167
  • สุภี-8788v2
  • สุภี-8967
  • สุภี-9652
  • สุภี-9767v2
  • สุภี-10336
  • สุภี-10266
  • สุภี-10415
  • สุภี-10570v2

วิธีการแก้

แก้ไขโดยการแก้ไขไฟล์แก้ไข แทนที่โปรแกรมแก้ไขสำหรับโปรแกรมปรับปรุงdownloadable.phtmlจากโปรแกรมแก้ไขสำหรับv1.7.0.2ในแฟ้มโปรแกรมแก้ไขต้นฉบับเหล่านี้คือบรรทัด 1854-1862

นี่คือสาเหตุหลักมาจากการเยื้องในไฟล์ เนื่องจากการเปลี่ยนแปลงdownloadable.phtmlในV1.7.0.2มีการเยื้องมากขึ้น

โซลูชันที่ 2

ฉันมีปัญหาที่คล้ายกัน แต่ฉันสามารถแก้ไขได้โดยการบันทึกไฟล์ต้นฉบับในเครื่องมือแก้ไขซึ่งบังคับให้บรรทัดที่ลงท้ายด้วย LF ของ Unix สไตล์ไม่ใช่ของ Windows CRLF หรือ Mac CR's


1

ในการอ้างอิงถึง Matt Antley พวกเขาอาจไม่ได้รวม SUPEE-10570v2 ไว้ด้วยเหตุผลนี้

เมื่อไม่นานมานี้ Magento ได้รับแจ้งเกี่ยวกับปัญหาที่เกิดขึ้นกับทั้งแพตช์ SUPEE-10570> และ Magento รุ่น 1.9.3.8/1.14.3.8 ซึ่งอาจทำให้ลูกค้าไม่สามารถชำระเงินได้เมื่อพยายามลงทะเบียนระหว่างการเช็คเอาต์ Magento กำลังจัดหาแพตช์ที่ปรับปรุงแล้ว (SUPEE-10570v2) ที่> ไม่ทำให้เกิดปัญหานี้อีกต่อไป อย่างไรก็ตามโปรดทราบว่าโปรแกรมแก้ไขใหม่นี้ไม่ได้ช่วยป้องกันปัญหาด้านความปลอดภัยที่เกี่ยวข้องกับการจัดการเซสชันที่มีความเสี่ยงต่ำสองตัวที่ช่วยแก้ปัญหา SUPEE-10570 https://magento.com/security/patches/supee-10570

เท่าที่ฉันทราบข้อผิดพลาดในการชำระเงินไม่ใช่เรื่องทั่วไปดังนั้นพวกเขาจึงตัดสินใจพักกับ SUPEE-10570 ซึ่งป้องกันปัญหาด้านความปลอดภัยที่มีความเสี่ยงต่ำสองอย่าง!


+1 นี่เป็นเหตุผลที่เป็นไปได้มากที่สุด แต่ก็เป็นที่น่าสังเกตว่าหากผู้ใช้กำลังอัปเกรดและจำเป็นต้องสมัครSUPEE-10570v2แล้วพวกเขาจะต้องสมัครใหม่
Matt Antley

ดังที่ Peter O'Callaghan กล่าวไว้การเปลี่ยนแปลงจาก 10570v2 จะถูกเปลี่ยนกลับเป็น 1,0752 ดังนั้นจึงไม่จำเป็นต้องรวมไว้ในอดีต เนื่องจากไม่มี 10570v2 สำหรับ 1.9.3.9 คุณไม่ควรสมัครอะไรเลย เหตุผลทั้งหมดอ่อนแอ: ทำไมวีโอไอพีควรรักษาสาขา 1.9.3.9 ไว้ในฐานที่แตกต่างจากที่อื่น ๆ ทั้งหมด? พวกเขายังกล่าวอีกว่าพวกเขาจะวางตลาดทุกครั้งในอนาคตและแก้ไขบน 10570v2
pong

ขอบคุณสำหรับความคิดเห็นของปีเตอร์และพงษ์ ลบคำตอบของฉันออกเนื่องจากทำให้เข้าใจผิดตามที่คุณทั้งสองระบุไว้ มันไม่ได้เป็นความตั้งใจของฉันเพียงแค่บางสิ่งที่ฉันไม่ได้คิดเมื่อเขียนออกมาและเป็นสิ่งที่ฉันสังเกตเห็นสั้น ๆ เมื่อดูSUPEE-10752และกระโดดปืนเล็กน้อย อีกครั้งขอบคุณสำหรับความคิดเห็น
Matt Antley

1

Patch ไม่ทำงานกับ Vanilla Magento CE 1.6.0.0

อัปเดต: เพิ่มโซลูชันด้านล่าง

ปัญหา:

file app/code/core/Mage/Admin/Model/User.php
Hunk #1 FAILED at 127.
...
file app/code/core/Mage/Customer/controllers/AccountController.php
Hunk #2 FAILED at 812.

นำไปใช้กับแพทช์ก่อนหน้า:

  • AppSec-212
  • สุภี-2631
  • สุภี-2725
  • สุภี-5344
  • สุภี-5994
  • สุภี-6237
  • สุภี-6285
  • สุภี-6482
  • สุภี-6788
  • สุภี-7405
  • สุภี-7405v.1.1
  • สุภี-8167
  • สุภี-8788v2
  • สุภี-8967
  • สุภี-9652
  • สุภี-9767v2
  • สุภี-10266
  • สุภี-10415
  • สุภี-10570v2
  • สุภี-10752

แก้ไข

ฉันได้แก้ไขปัญหานี้แล้วโดยการเปลี่ยนไฟล์แก้ไข ฉันแทนที่นักล่าซึ่งให้ปัญหากับผู้อ้างอิงจากแพตช์สำหรับ v1.5.1.0 ในไฟล์แพทช์ต้นฉบับนี่คือบรรทัด 167-177 และ 663-670


1

ใน EE v1.14.2.4 หลังจากใช้ SUPEE-10752 ฉันต้องใช้แพตช์ต่อไปนี้เพื่อแก้ไขปัญหาที่เช็คเอาต์เปลี่ยนเส้นทางไปที่หน้าแรกแทนที่จะเป็นหน้าความสำเร็จ:

ไฟล์: invalid_session_fix-2018-03-14-05-10-19.patch

diff --git a/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php b/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
index 59b3ea8..35155f1 100644
--- a/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
+++ b/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
@@ -485,7 +485,7 @@ class Mage_Core_Model_Session_Abstract_Varien extends Varien_Object
             && isset($validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP])
             && isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
             && $validatorData[self::VALIDATOR_PASSWORD_CREATE_TIMESTAMP]
-            > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] - $this->getCookie()->getLifetime()
+            > $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP]
         ) {
             return false;
         }

การแก้ไขด้านบนพบได้ในhttps://magento.com/tech-resources/downloadภายใต้SUPEE-10570 > invalid_session_fix.patch (0 MB)


นอกจากนี้ยังทำเช่นเดียวกันกับ CE 1.9.3.6 เมื่อ php คือ <5.5 ขอบคุณสำหรับการแก้ไข
GunJan Mehta

1

ฉันพบปัญหาหลังจากแก้ไขนี้ ฉันไม่สามารถตั้งค่า "วิธีการฟรี" สำหรับ "ประเภท UPS" "United Parcel Service XML" วีโอไอพีพ่นข้อผิดพลาดเมื่อเลือกวิธีใดใน "วิธีฟรี" แบบเลื่อนลง ข้อผิดพลาด: " Field" Ups Free Method "มีค่าที่ไม่ถูกต้อง "

มีใครประสบปัญหาเดียวกันและได้แก้ปัญหาหรือไม่

ขอบคุณล่วงหน้า!


0

ในวันที่ 1.6 แพตช์ ups.phtml เสียหาย มันคือการอ้างถึง $ hiddenOriginShipment $, $ hiddenFreeShipment ที่มีการพิมพ์ผิดใน 1.6 ($ stroredOriginShipment และ $ stroredFreeShipment) นอกจากนี้ยังอ้างถึง $ hiddenUpsType $ ที่ไม่มีอยู่ใน 1.6


0

เราพบปัญหาใน 1.9.1.0 และ 1.9.2.4 (ยังไม่ได้ทดสอบกับผู้อื่น) มันไม่ปรากฏในทุกโครงการของเรา แต่มันซ้ำหลายครั้ง เราคิดว่าอาจมีผลต่อโครงการที่ติดตั้ง SUPEE-10570v1 ในบางจุด

หลังจากใช้โปรแกรมแก้ไขหากผู้ใช้ลงชื่อเข้าใช้พวกเขาจะเห็นหน้าบัญชีของพวกเขาได้อย่างสมบูรณ์แบบ อย่างไรก็ตามหากพวกเขาพยายามที่จะกลับไปที่หน้าอื่น ๆ ในเว็บไซต์หน้าจะหยุดตอบสนองและพวกเขาจะเห็นหน้าจอว่างเปล่าหรือประตูที่ไม่ดี 502 นี่คือสาเหตุที่ PHP เข้าสู่วงวนไม่สิ้นสุดและการแยกไฟล์หรือหยุดโดยการตั้งค่า. ini

ฉันจัดการเพื่อขุดขึ้นว่าปัญหาเป็น recursion อนันต์ที่บรรทัดที่โหลด$customerใน,\app\code\core\Mage\Customer\Helper\Data.phpgetPasswordTimestamp()

$customer = Mage::getModel('customer/customer')
        ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
        ->load((int)$customerId);

เมื่อมองไปที่การติดตามสแต็กของการเรียกซ้ำแบบไม่สิ้นสุดจะวนซ้ำไปเรื่อย ๆ อย่างใดดูเหมือนว่า->load()ท้ายเรียกgetPasswordTimestamp()วิธี

วิธีแก้ปัญหาที่ระบุใน/magento//a/235984/67252 ใช้งานได้ดี แต่ฉันต้องการทราบว่าเกิดอะไรขึ้น


0

หลังจากใช้แพตช์ SUPEE 10752 แล้วการลงทะเบียนและการชำระเงินจะนำหน้าความสำเร็จไปที่หน้าแรก ข้อเสนอแนะใด ๆ


-1

เราเห็นหน้าว่างที่ / checkout / * หลังจากใช้ SUPEE-10752 และรวบรวม

รุ่น: 1.9.1.0

เงื่อนไขการทริกเกอร์: การใช้ SUPEE-10752 + เปิดใช้งานคอมไพเลอร์ + เข้าสู่ระบบเป็นลูกค้าจากนั้นไปที่ / checkout / *

เพียงเพื่อชี้แจง: ด้วยการปิดการใช้งานคอมไพเลอร์ทุกอย่างเป็นไปด้วยดีด้วยคอมไพเลอร์ที่เปิดใช้งานเราจะเห็นหน้ารถเข็นเปล่าเมื่อล็อกอินโดยไม่มีรายการบันทึก (แม้หลังจากเปิดใช้งานบันทึกและโหมดนักพัฒนาที่เป็นไปได้ทั้งหมด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.