安裝 SUPEE-6788 Security Patch 與除錯

You are here:
< All Topics

Magento 在 2015年 10月發佈了不少安全性補丁,其中 SUPEE-6788 修正了許多重大安全性漏洞

也因這些修正,造成了某些『樣版』與『外掛套件』不相容

因為 1.9.2.2 已經包含了全部的安全性補丁,如果直接升級上去,有錯誤時不容易除錯

所以建議先將含 SUPEE-6788 之前的補丁一次處理完,確認都沒問題之後在升級 1.9.2.2 較保險

首先先簡單介紹如何使用 SSH patch SUPEE-6788

Step 1:下載 Patch

https://www.magentocommerce.com/download 可以下載到各個版本的 Patches

我們目前的版本為 1.9.2.1,所以下載這個版本使用的 SUPEE-6788 即可

Step 2:執行 Patch 檔

將 PATCH_SUPEE-6788_CE_1.9.2.1_v1-2015-10-26-11-38-41.sh 放置於 Magento 的根目錄後執行

# chmod +x PATCH_SUPEE-6788_CE_1.9.2.1_v1-2015-10-26-11-38-41.sh
# ./PATCH_SUPEE-6788_CE_1.9.2.1_v1-2015-10-26-11-38-41.sh
Checking if patch can be applied/reverted successfully...
Patch was applied/reverted successfully.

這樣就完成補丁了

如果補丁造成無法正常使用,也可以使用 –revert 的指令恢復之未修補的狀態

# ./PATCH_SUPEE-6788_CE_1.9.2.1_v1-2015-10-26-11-38-41.sh --revert

後續動作

補丁完後,有時會發現網頁中的一些區塊消失了

這是因為 SUPEE-6788 新增了 Variables 及 Blocks 的權限,預設只有開放 core/template 及 catalog/product_new

而 Ultimo 的 Brand slider 無法正常顯示

解決方法是到

系統 / 權限 / Blocks

新增 Allowed 的 brands/brands

就可以正常顯示了

 

如果無法確定要放行的 Block 名稱,也可以用 http://www.dudesquare.nl/blog/2015/10/31/static-block-shortcodes-not-working-1-9-2-2/  中提到的方法來找

也別忘了要在

系統 / 設定 / 進階 / 管理員選項 / 安全 / Admin routing compatibility mode for extensions

『停用』Admin routing compatibility mode,才有防護效果喔

補充:停用了之後,會有一些模組無法正常作動,最好事先檢查一下(我們目前有 MOB、Price Decimal、Log Viewer 無法正常使用)

除錯篇

在進行補丁的過程中,遇到了幾個問題

無法進行 Patch

因金流模組的原因,無法正常瀏覽刷卡支付的訂單

客戶無法正常註冊

 

無法進行 Patch

再執行 Patch 時會檢查根目錄中的 .htaccess 與 .htaccess.sample 這兩個檔案是否正確(有 Patch 時這兩個檔案好像會有修改紀錄)

而我們這兩個檔案不見了,最簡單的解決方案是下載 1.9.2.1 的原始檔,再將 .htaccess 與 .htaccess.sample 拷貝進去根目錄,問題就解決了

 

無法正常瀏覽刷卡支付的訂單

Patch SUPEE-6788 後,有些原先可以使用的 SQL 語法變的無法使用了(我們遇到的是使用玉山金流支付的訂單在後台無法瀏覽)

錯誤訊息為

"SQLSTATE[42S22]: Column not found: 1054 Unknown column '`order`' in 'where clause', query was: SELECT `main_table`.* FROM `wbxpayment_orders_info` AS `main_table` WHERE (```order``` = '414')"

根據 https://magento.com/security/patches/supee-6788-technical-details 的教學範例:

$collection->addFieldToFilter('`field`', array('eq'=>3));

應該要修改為:

$collection->addFieldToFilter('field', array('eq'=>3));

我們依此方式修改

vim /usr/share/nginx/html/app/code/local/Webxmore/Payment/Block/Adminhtml/Sales/Order/View/Tab/Info.php

將第 48 行中的

$info = Mage::getModel("wbxpayment/order")->getCollection()->addFieldToFilter("order", array("eq" => $order->getId()))->getFirstItem();

修改為

$info = Mage::getModel("wbxpayment/order")->getCollection()->addFieldToFilter('order', array('eq' => $order->getId()))->getFirstItem();

就可以安心補丁了,不過有另一個問題:如果修正了這一行,但又沒有 Patch SUPEE-6788 ,會報錯,因為我們不需要面對這個問題,所以就暫不處理了

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'order = '419')' at line 1, query was: SELECT `main_table`.* FROM `wbxpayment_orders_info` AS `main_table` WHERE (order = '419')"

 

客戶無法正常註冊

補丁 SUPEE-6788 後,客戶註冊表格會新增一個隱藏表格『form_key』

當初在查詢時,Ultimo 有說到他們並沒有覆蓋 register.phtml 這個檔案,所以不會有影響

但我們補丁完後,還是發現了客戶無法正常註冊(送出註冊資訊之後,會清空填寫的資料)

實際修改後,發現問題出在 Plumrocket 的 Twitter & Facebook Login

修改方式如下

# vim /usr/share/nginx/html/app/design/frontend/ultimo/default/template/pslogin/customer/form/register.phtml

@ Line 57 新增一行

            <input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />

清空 OPCache 之後就沒問題了

 

參考資料

SUPEE-6788 TECHNICAL DETAILS
MAGENTO SECURITY PATCH SUPEE-6788 – INSTALLATION ISSUES
How to install SUPEE-6788
Static blocks not working – Magento 1.9.2.2
Magento Security Patch Tester
Previous 安裝 Redis Server 為 Magento 2.3.3 提供 Session 快取加速
Next 安裝 SUPEE-7405 Security Patch 與除錯
Table of Contents