보안 패치 SUPEE-10415-가능한 문제?


37

새로운 마 젠토 1 패치 인 SUPEE-10415 가 출시되었습니다 .

이 패치는 여러 유형의 보안 관련 문제로부터 보호합니다

정보 페이지 : https://magento.com/security/patches/supee-10415
다운로드 페이지 : https://magento.com/tech-resources/download

조심해야 할 문제는 무엇입니까?

또한 패치 설치 후 발견 된 모든 버그와 문제를 공유하십시오.


  • 바닐라 1.9.1.1 에서 SUPEE-10415를 적용 할 때 발생하는 문제는 Image.php의 덩어리 오류 메시지로 인해 쇼를 적용 할 수 없습니다 . 편집 : SUPEE-10497에서 2017 년 12 월 7 일 수정 사항이 제공됩니다

  • 이 있어야 8788 버전이 설치되어, 그렇지 않으면 "지원되지 않는 데이터 유형"오류가 표시됩니다. 더 많은 정보.

  • SUPEE-10415로 업그레이드 한 후 errors / 디렉토리에서 "404 : Page Not Found" 오류가 발생했습니다. 이 문제는 특정 타사 확장 프로그램을 실행하는 Magento 설치에서만 발생합니다.
    해결 방법 : 확장 또는 사용자 정의에서 생성 된 PHP 경고가 없는지 확인하십시오.

5
여기서 Magento 1.9.2.4CE에 문제없이 배포되었습니다. 대부분의 변경 사항은 관리자의 변수, 특히 로그 파일 저장에 대한 위생적인 ​​것으로 보입니다. 살균 측면에서도 비누 API에 약간의 변화가있는 것으로 보입니다. 리뷰는 관리자 영역에서도 삭제되므로 악의적 인 코드가 MO (검토)에서 리뷰에 게시 될 수있는 악용 가능성이 있습니다.
Ricky Odin Matthews

2
여기에 Magento 1.9.3.0 CE에 배포 할 수 있습니다. 해당 패치를 아직 적용하지 않은 경우 10266 이전의 패치가 필요합니다.
danmentzer

1
1.9.1.0- "쇼핑 카트 가격 규칙"에서 패치로 인해보기 규칙에서 하드 오류가 발생 함-로그 항목 -a : 5 : {i : 0; s : 23 : "지원되지 않는 데이터 유형 N"; i : 1; s : 1464 : "# 0 /opt/bitnami/apps/magento/htdocs/lib/Unserialize/Reader/Arr.php(102) : Unserialize_Reader_ArrValue-> read ( 'N', ';') ---- SUPEE-10415의 패치 복귀 버전 수정
Laith

1
답변을 게시하는 것으로 유명하지는 않지만 Magento 1.9.3.7로 업그레이드 한 다음 Git을 사용 하여이 패치와 병합 할 수는 없습니다. 기본 Git 동작을 사용하면 MAXIMUM_PASSWORD_LENGTH 상수가 두 번 추가됩니다 이에 대한 해결 방법입니다).
toon81

1
1.9.1.1 문제 : 대신 SUPEE-10497을 사용하십시오.이 문제는 최근 1.9.1.1에서 해결되었습니다. 이 패치를 설치하기 전에 SUPEE-10266을 제거해야하므로 릴리스 정보를 읽으십시오.
Piotr Kaminski

답변:


26

아래 파일은 패치 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

몇 가지 중요한 사항 :

1) 허용되는 파일 확장자 : log, txt, html, csv. 아래 파일을 확인하십시오

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) 최대 암호 길이 설정은 256 자이며 app/code/core/Mage/Customer/Model/Customer.php파일 에서 유효성 검사

@@ -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.');

EE Edition의 경우 추가로 4 개의 파일 추가

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

EE의 불충분 한 점

아래 파일에 조건을 추가했습니다.

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

테마 파일에서 아래 조건을 업데이트하십시오.

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

자세한 내용은:

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


SUPEE-10415를 적용한 후 404 오류가 발생하는 프런트 엔드 및 백 엔드 모두이 문제를 어떻게 해결할 수 있습니까? magento.stackexchange.com/q/215620/57334
zus

별도의 티켓을 생성하고 오류 로그로 설명하고 의견을 추가하여 도와 드리겠습니다. 이 문제는 .htaccess로 인해 또는 로컬에서 모듈을 대체합니다.
라마 찬드 란 M


20

SUPEE-10415 ...

  1. 다음 영역에서 일부 관리자 패널 XSS 문제를 해결합니다.

    • 제품 리뷰 보고서
    • 제품 태그 보고서
    • 제품 리뷰 추가 / 편집 인터페이스
    • 결제 계약
    • xmlconnect 컨텐츠 편집기 탭
    • 일련 화 된 규칙
  2. 시스템 및 예외 로그 파일에 사용할 수있는 파일 확장자를 제한합니다. 허용 파일 확장자 : .log, .txt, .html,.csv

  3. 고객 계정 비밀번호에 256 자 상한을 설정합니다. 이 특별한 변화는 말도 안됩니다. 그들이이 밝은 생각을 어디서 얻었는지 확실하지 않습니다.

고객 비밀번호 길이 제한을 제외하고는 이러한 변경 중 어느 것도 크게 변경되지 않거나 이전 버전과 호환되지 않는 변경으로 보이지 않습니다.


9
데이터베이스 비밀번호 필드는 maxlength = 255 인 customer_entity_varchar.value에 있기 때문에 256 개의 비밀번호 길이는 패치되지 않은 Magento에서 실제로 버그입니다.
Ricky Odin Matthews

12
당신은 맞습니다; customer_entity_varchar.value의 열 크기는 제한되어 있습니다. 그러나 암호가 해당 열에 저장되어 있지 않기 때문에 버그가 아닙니다. 소금과 해시 된 암호가 저장됩니다. 이 값은 원래 비밀번호의 크기에 관계없이 항상 고정 길이입니다. 이 패치 이전에는 255자를 초과하는 비밀번호를 입력하는 데 아무런 문제가 없었습니다.
t-richards

3
암호 길이 변경이 APPSEC-1330과 관련이 있다고 가정합니다. magento.com/security/patches/supee-10415
quasiobject

7
: 아마도 이것은 그들의 생각, 롭입니다 stackoverflow.com/a/98857/8199523
RickyMage123

1
@ t-richards 좋은 지적, 바로 거기에 있습니다. 왜 그렇게 생각하십니까, 긴 암호를 해시하면 CPU 사용 측면에서 DoS 문제가 발생할 수 있다고 생각합니다. 길이가 길면 PHP의 CPU / 메모리가 해시하는 데 더 많은 CPU / 메모리가 필요합니까?
Ricky Odin Matthews

12

SUPEE 10415 8788 v2 패치 필요

이전 게시물과 동일한 오류가 발생했지만 삭제 된 것 같습니다.

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";}

M 1.8.00 CE에 새 패치를 설치할 때 위의 오류가 발생했습니다. 구체적인 원인은 8788의 v2 패치를 사용하여 해당 패치에서 대부분의 문제를 수동으로 수정했지만 직렬화되지 않은 부분이 누락 된 것 같습니다.

패치를 되 돌리는 대신 수동으로 수정했으며 사이트가 제대로 작동합니다.

아래에 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;
+    }
+}

이 게시물 SOLVED 에서 오류에 대한 자세한 내용을 읽을 수도 있습니다 . new Unserialize_Parser 클래스는 NULL 값에서 예외를 throw합니다.


아하! 문제를 방지하려면 8788 V2가 필요합니다.
아이콘

웹 사이트의 어느 페이지에서 "지원되지 않는 데이터 유형"오류가 발생했는지 알 수 있습니까? 복제하려고합니다.
Icon

제품이 장바구니에있는 동안 카테고리 페이지와 제품 페이지 및 장바구니에서 트리거 할 수있었습니다.
danmentzer

@ danmentzer 어떻게 내가 오류를 해결할 수 패치 9767 v1을 되돌릴 :: 오류 : justpaste.it/1e9pn
zus

@zus 나는 당신의 게시물을 보았습니다. 이것이 페이스트 모양에서 알아 냈습니까? 오류에 대한 세 가지 가능한 이유를 추측 할 것입니다. 1. 패치 버전이 잘못되었습니다 (가장 가능성이 가장 낮습니다). 2. 패치가 이미 적용되지 않았습니다. 3. 아마 수동으로 그 중 일부를 수정했을 수도 있고 패치는 그 방법을 좋아하지 않습니다. 도움이되지 않으면 죄송합니다
danmentzer 2016 년

11

이 패치와 관련하여 사이트의 모든 페이지가 errors/디렉토리 에서 "404 : Page Not Found"오류를 표시하기 시작했습니다 . 이에 발행 된 PHP 경고에 의해 발생 된 밖으로는 회전 파고 조금 후 Mage_Core_Model_App::init다음을 야기, Mage_Core_Model_Store_Exception패치에서 다음 라인 :

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. 상점이 초기화되기 전에 PHP 경고가 발생합니다
  2. 메시지가 로그 파일에 기록되도록 mageCoreErrorHandler()호출 Mage::log()하여 경고를받습니다 .
  3. Mage::log() 전화 Mage::helper('log')
  4. Mage_Log_Helper_Data::__construct통화 Mage::getStoreConfig(), 통화 Mage::app()->getStore(), 그러나 상점은 아직 초기화되지 않은과가 Mage_Core_Model_Store_Exception발생합니다
  5. app/Mage.php:647 예외를 포착하고 404 페이지를 리턴합니다.

로그 파일 확장자를 확인할 때 경고를 수정하거나 예외를 포착하는 것 외에는 솔루션의 현재 상태를 확실하지 않습니다. 그들이 생각하는 것을보기 위해 이것을 Magento에보고하려고합니다.


어떤 버전을 사용하고 있습니까?
Icon

1
@ 아이콘 1.9.3.6. 최신 프로젝트 중 일부에는 __construct()방법 Mage_Log_Helper_Data이 없었으므로 이에 영향을받지 않지만 최신 커뮤니티 및 엔터프라이즈 버전 모두에 영향을 미칩니다.
Tomas Gerulaitis

magento가이 질문을 해결 한 것 같습니다 devdocs.magento.com/guides/m1x/ce19-ee114/…
Icon

magento가 다음 패치로이 문제를 해결할 계획인지 언급 했습니까?
Icon

1
@ 아이콘 Magento의 구성 초기화 중에 문제가 발생했기 때문에 관리자와 프론트 엔드에서 오류가 발생했습니다.
Tomas Gerulaitis

8

1. 해결 : 사용자가 관리자를로드 할 때 잘못된 비밀 키 문제

이 패치에서 Magento는 더 이상을 표시하지 않습니다 “Invalid Secret Key. Please refresh the page.” message when a user loads the Admin.

에서 코드를 변경하여

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

모든 고객 비밀번호를 길이 MAX 256으로 엄격히 :

우리는 이미 magento 1.x 암호의 최소 길이가 6 이라는 것을 알고 있습니다.

그러나이 패치에서 magento는 최대 길이를 256으로 제한합니다.

이 사건은, 마 젠토는 수행 한 변경 의 기능에서 validate()고객 모델 클래스 사람이있는 경우 .so는을 그들이에 코드 아래에 추가해야합니다 다음 오버라이드 (override) 또한 클래스를 오버라이드 (override)that 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);
}

$this->escapeHtml()XSS 공격이 가능한 일부 파일의 경우 Add and Mage :: helper ( 'core')-> quoteEscape ()

누군가이 파일을 재정의하는 경우 재정의 클래스 1을 적용하려면 코드 아래에 코드를 추가해야합니다.

바꾸다

$ this-> _ headerText = 마법사 :: helper ( 'reports')-> __ ( '% s에 대한 검토', $ product-> getName ());

$ this-> _ headerText = 마법사 :: helper ( 'reports')-> __ ( '% s에 대한 검토', $ this-> escapeHtml ($ product-> getName ()));

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

바꾸다

$ this-> _ headerText = 마법사 :: helper ( 'reports')-> __ ( '% s'에 제출 된 태그, $ product-> getName ());

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

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

바꾸다

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

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

  1. 판매 주문보기 청구 동의 : app / design / adminhtml / default / default / template / sales / billing / agreement / view / tab / info.phtml

바꾸다

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

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

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

바꾸다

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

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

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

바꾸다

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

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


4
감사합니다 @ Amit 내 대답에서 "해결 : 잘못된 비밀 키 문제"가 누락되었습니다 :). +1
Rama Chandran M

1
당신은 환영합니다 :) ... 당신은이 질문에 좋은 일을했습니다
Amit Bera

7

SUPEE-10358 ^을 이미 적용했거나 app/code/core/Mage/Adminhtml/Controller/Action.php" Invalid Secret Key "문제에 대해 수동으로 패치 한 경우 패치 파일에서 해당 섹션을 수동으로 삭제해야합니다.

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

또한 " new-pawwsord "오타 (SUPEE-10266에 도입)를 이미 수정 한 app/design/adminhtml/default/default/template/backup/dialogs.phtml경우 패치에서 해당 섹션도 삭제하십시오.

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는 InvalidSecretKey 문제와 관련된 EE 지원 티켓에 대한 응답으로 SUPEE-10358을 제공했습니다.


5

문제 : 패치가 바닐라 1.9.1.1에서 작동하지 않습니다

편집 1 : 수정이 아래에 추가되었습니다.

편집 2 : 내 수정이 더 이상 필요하지 않습니다. Magento 는이 문제를 해결하는 SUPEE-10497 을 제공했습니다 .

문제:

# 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

바닐라 마 젠토 1.9.1.1은 https://github.com/OpenMage/magento-mirror/archive/1.9.1.1.tar.gz 에서 다운로드되었습니다.

이 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

1.9.1.1 용 SUPEE-10415 패치의 공식 픽스 :

  • 설치 한 경우 SUPEE-10266: 다음
    을 사용하여 되돌립니다. ./PATCH_SUPEE-10266_CE_1.9.1.1_v1-2017-09-15-04-59-56.sh --revert
  • 당신이 설치 한 경우 SUPEE-10415:
    되돌리기는 사용 ./PATCH_SUPEE-10415_CE_1.9.1.1_v1-2017-11-27-05-47-08.sh --revert
  • 이제 SUPEE-10497을 적용하십시오

1.9.1.1 용 SUPEE-10415 패치에 대한 수동 수정 [사용되지 않음] :

파일을 편집하고 PATCH_SUPEE-10415_CE_1.9.1.1_v1-2017-11-27-05-47-08.sh행을 445바꿉니다 447.

낡은:

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

새로운:

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

나는 또한 이것을 경험하고있다. 에 문제가있는 것 같습니다 app/code/core/Mage/Core/Model/File/Validator/Image.php. 패치 SUPEE-10415은 고려 패치 SUPEE-9767 (v1 또는 v2를)에 의해 수정을 표시되지 않습니다
wr125

1
내 답변 하단에 수정 사항이 추가되었습니다.
Jeroen Vermeulen-MageHost

1
동의하지 않습니다. github.com/OpenMage/magento-mirror/archive/1.9.2.2.tar.gz 에서 바닐라 설치를 수행 하여 다음 순서로 패치를 적용 할 수있었습니다. SUPEE-7405-CE-1-9-2-2 | CE_1.9.2.2 | v1, SUPEE-7405 | CE_1.9.2.2 | v1.1, 수프 -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
이전 패치를 모두 적용해야합니다. 이전 의견을 참조하십시오. 나는 그것을 테스트했다.
Jeroen Vermeulen-MageHost

4
대신 SUPEE-10497을 사용하십시오.이 문제는 최근에 1.9.1.1에서 해결되었습니다. 이 패치를 설치하기 전에 SUPEE-10266을 제거해야하므로 릴리스 정보를 읽으십시오.
Piotr Kaminski

3

다음은 전체 변경 로그와이 변경 로그에 대한 이해입니다.

어떤 원인이 영향을받는 파일은 다음과 같습니다.

HTML 변경 탈출

파일

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

대신 '/'DS 추가

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

새로운 파일 추가

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

완전한 변경 파일

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

getCacheId () 및 getServiceUrl () 메소드 추가

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

unserialize () 메소드 추가

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

app / code / core / Mage / Api / Helper / Data.php에서 생성 된 getServiceUrl () 메소드 사용

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

app / code / core / Mage / Api / Helper / Data.php에서 생성 된 getCacheId () 메소드 사용

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

unserialize()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

댓글 변경

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

댓글 추가

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

추가 된 최대 비밀번호 길이

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

허용 된 파일 확장자 허용 // $ _ allowedFileExtensions = array ( 'log', 'txt', 'html', 'csv');

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

무슨 변화를 몰라

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

이슈리스트

SUPEE-10415는 바스켓 제어를 방지합니다

magento의 페이팔에서 # 10415의 오류 코드를 얻습니다.


1

Magento EE 1.13.0.2에서 이것을 시도하고 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는 함께 라인을 변경 $phpAuthUser하는

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

뿐만 아니라 한 $phpAuthUser라인 다른는 이전 간격 ->setUseSession(false);도 정확
DanCarlyon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.