Post by HAO » Thu Nov 07, 2013 5:40 pm

我有兩個 OpenCart 都被駭客在 download 目錄底下丟木馬程式,都是大陸駭客所留下的,請問官方工作人員該如何處理這個問題呢?

HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm

Post by GeeHim » Fri Nov 08, 2013 12:13 pm

您好!

你的DOWNLOAD目录PERMISSION改了吗?

可以给我们多一些资料吗?

谢谢

Kind regards,

GeeHim Siu
Open Cart Support


New member

Posts

Joined
Mon Dec 10, 2012 12:44 pm

Post by HAO » Fri Nov 08, 2013 12:51 pm

我有兩個 cPanel 環境的主機,一個是需要設定 CHMOD 檔案目錄權限的,另外一個是不需要設定就能直接使用,就結論來說 download 在你們程式架構的設計之下,該目錄預設的讀寫權限,似乎都是要設定成 777 才能正常運作。(關掉就出現 download/test 的錯誤訊息)

我是建議官方可以開發能直接在後台選擇是否使用下載型商品的功能,只要設定成[否]就可以讓使用者自行刪除 download 目錄,避免可能的安全性問題,這點還請參考。

HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm

Post by HAO » Mon Nov 11, 2013 2:18 pm

我又發現一個 OpenCart 被放木馬了,時間是 2013-3-15 下午3:36 也是相同的攻擊模式。

使用版本:OpenCart 1.5.4、1.5.5.1(之前另外一個系統,也是相同的環境。)
系統環境:
Apache 版本 2.2.22
MySQL 版本 5.0.96-community-log
PHP 版本 5.2.17

請官方正視這個問題,因為在台灣有很多虛擬主機商都很看重 OpenCart 這套程式的發展,還請提供解決方案。

HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm

Post by GeeHim » Tue Nov 12, 2013 10:04 am

永远不要张权限定为777, 这个在那里都不安全, 如果你不改为777不行的话这个就是hosting的问题了 当然644最好但是你可以试试755

其实在opencart后台可以关闭这个选刊, System > Settings > Edit > Store > Allow downloads 然后选no

虽然不会删除你的downloads folder但是效果一样的, 不会有地方给黑客上载东西

希望帮到你!

Kind regards,

GeeHim Siu
Open Cart Support


New member

Posts

Joined
Mon Dec 10, 2012 12:44 pm

Post by HAO » Tue Nov 12, 2013 2:55 pm

感謝您的回應,只是這個解答有些矛盾。

因為 download 目錄在安裝時,必須要設定 777 才能安裝,這是安裝檔本身的限制。

警告字串:
Warning: Download directory needs to be writable for OpenCart to work!
下載目錄設定成 755 的錯誤訊息:

Code: Select all

Warning: fopen(/home/username/public_html/download/test) [function.fopen]: failed to open stream: Permission denied in /home/username/public_html/admin/controller/common/home.php on line 99
Warning: fclose(): supplied argument is not a valid stream resource in /home/username/public_html/admin/controller/common/home.php on line 103
Warning: sprintf() [function.sprintf]: Too few arguments in /home/username/public_html/admin/controller/common/home.php on line 106
這是在站內也能搜尋過的問題,至於 System > Settings > Edit > Store > Allow downloads > Set [No] 預設都是關閉的狀態,只能說希望在下一個版本,可以把「download」目錄改成非必須讀寫的項目,在使用「下載型商品」功能的說明字串,加上如何設定對應目錄與啟用的教學,我認為這是比較合理的解決方法,還請參考。

HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm

Post by GeeHim » Wed Nov 13, 2013 11:13 am

您好!

是, 对不起我翻查过了,downloads文件夹要755

如果755不行的话这个是hosting的问题, 我刚刚看过几个opencart的安装755是没有问题的

我还是建议你问问你hosting, 毕竟777太不安全了

Kind regards,

GeeHim Siu
Open Cart Support


New member

Posts

Joined
Mon Dec 10, 2012 12:44 pm

Post by HAO » Wed Nov 13, 2013 4:21 pm

恕我冒昧,設定 755 就有錯誤訊息的問題,是跟這段程式碼有關。

打開:
upload/admin/controller/common/home.php

尋找

Code: Select all

		// Check download directory is writable
		$file = DIR_DOWNLOAD . 'test';
		
		$handle = fopen($file, 'a+'); 
		
		fwrite($handle, '');
			
		fclose($handle); 		
		
		if (!file_exists($file)) {
			$this->data['error_download'] = sprintf($this->language->get('error_download'). DIR_DOWNLOAD);
		} else {
			$this->data['error_download'] = '';
			
			unlink($file);
		}
如果說你們也建議 download 目錄,也要設定成 755 避免被入侵的可能性,那應該就要從程式碼拿掉。
否則在安裝時跟安裝後,都要求設定 777 讀寫權限,另一方面還要建議設定成 755 這樣會產生矛盾,您懂我的意思嗎?

總之,總結目前找到的解決方案:
1.手動變更 download 的目錄名稱。 (將 download 目錄更名成其它的亂數名稱)
2.放置「禁止讀取」的 .htaccess 檔案,避免駭客執行木馬程式。

HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm

Post by opencartchina » Thu Nov 14, 2013 6:45 pm

我們所採用的hosting都沒有這個問題,在安裝時以及安裝后,都為755.應該是你的hosting方面需要調整。

OpenCart中国(http://www.opencartchina.com)
OpenCart中文论坛:http://www.opencartchina.com/bbs
Email: opencartchina@qq.com
QQ: 1487063622
OpenCart技术交流QQ 1群:282797742
OpenCart技术交流QQ 2群:298317506
OpenCart技术交流QQ 3群:198384554
OpenCart技术交流QQ 4群:227297836
中国版MyCnCart官方QQ群:473071696


New member

Posts

Joined
Thu Jan 31, 2013 10:38 am

Post by HAO » Thu Nov 14, 2013 8:09 pm

這樣說好了,目前 cPanel 有兩種虛擬主機環境,傳統的 Linux 虛擬主機,都必須要設定 CHMOD 才能寫入檔案。(包括 OpenCart 也是如此)

需要設定讀寫權限的清單:
3. Please make sure you have set the correct permissions on the files list below.

Files Status
/home/*.*/public_html/shop/config.php Writable
/home/*.*/public_html/shop/admin/config.php Writable

4. Please make sure you have set the correct permissions on the directories list below.

Directories Status
/home/*.*/public_html/shop/system/cache/ Writable
/home/*.*/public_html/shop/system/logs/ Writable
/home/*.*/public_html/shop/image/ Writable
/home/*.*/public_html/shop/image/cache/ Writable
/home/*.*/public_html/shop/image/data/ Writable
/home/*.*/public_html/shop/download/ Writable
近幾年有些 Linux 虛擬主機,因為安裝特定的主機套件之緣故,就不再需要設定 CHMOD 權限,就能正常寫入產生檔案。(至於套件的詳細名稱,我明天再問看看。)

現在的問題點在於說,傳統的 Linux 虛擬主機(不論是 cPanel 或 Plesk 體系的)通常都是「需要」設定「讀寫權限」才能正常運作。

我想要說的是,對於多數沒有在使用虛擬銷售的使用者來說。
在預設情況下,是不是真的有必要要求每個使用者,都要強制設定 download 的 CHMOD 到 777 才能安裝跟正常運作?

至於扯到是我的主機環境有問題,那我只能說是你們的觀念上邏輯錯誤。
因為我如果要解決的話,就直接將那段判斷讀寫權限的程式碼直接刪除就可以了,甚至在前後台的 config.php 也不用標示 download 的路徑,這樣不是更乾脆嗎?

我要說的是,你們應該可以開發成在安裝時,詢問使用者是否要使用下載型商品功能?
如果需要就請他們自行命名相對應的目錄名稱及設定讀寫權限,如果不需要就連 download 這個目錄都不用建立,這樣問題不就解決了嗎?

我想說的就是這樣。

PS.相同邏輯,也能應用在安裝時,讓使用者自行決定後台的安裝路徑名稱,不要都用預設的路徑造成可能的安全性問題。

HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm

Post by GeeHim » Fri Nov 15, 2013 10:04 am

您好,

这方面我不是专家, 所以我都是张我知道的资料告诉你, 如果755都不行就用757 都比777好

我们先前都试过有几个客人的hosting都不可以755运行的 但是9成以上都可以, 755可以给你权限来读写但是不可以execute

你试试上载一张图片然后看看他的permission是不是644

其实这个问题在讨论上有谈过, 你上载图片的时候, 那个文件会有一个mask的, 像:

testupload.jpg.12dec389004802ff38079c3a6f26175a

你要去system > settings > server 那里改那个encryption key, 越random越好

你的encryption够的话黑客应该是找不到文件, 找到都不可以execute, 但是像你说的一样, 你想跟一步加固你的商店就改downloads文件夹的名字

你说的都在这里讨论过:http://forum.opencart.com/viewtopic.php?f=20&t=98644

希望帮到你!

Kind regards,

GeeHim Siu
Open Cart Support


New member

Posts

Joined
Mon Dec 10, 2012 12:44 pm

Post by HAO » Fri Nov 15, 2013 4:40 pm

我是覺得這些都是細枝末節的問題,因為您我所說的,就只是傳統的 mod_php5 跟 suPHP 在讀寫權限上的差異罷了。

傳統的 mod_php5 都是需要設定 CHMOD 檔案權限。(你們安裝檔上面的權限檢查,就是這樣的東西。)

近期的 suPHP 不用設定 CHMOD 檔案目錄,直接就能安裝跟使用了。(你們在說的就是這樣的東西。)

不論是哪種環境,都是差不多的,差別只在 mod_php5 環境的用戶,他們的 download 都需要設定 777 才不會出現錯誤訊息。

解決方法如下:
打開:
upload/admin/controller/common/home.php

尋找

Code: Select all

		// Check download directory is writable
		$file = DIR_DOWNLOAD . 'test';
		
		$handle = fopen($file, 'a+'); 
		
		fwrite($handle, '');
			
		fclose($handle); 		
		
		if (!file_exists($file)) {
			$this->data['error_download'] = sprintf($this->language->get('error_download'). DIR_DOWNLOAD);
		} else {
			$this->data['error_download'] = '';
			
			unlink($file);
		}
刪除並存檔

打開:
upload/admin/view/template/common/home.tpl

尋找

Code: Select all

  <?php if ($error_download) { ?>
  <div class="warning"><?php echo $error_download; ?></div>
  <?php } ?>
刪除並存檔

打開:
upload/config.php 和 upload/admin/config.php

尋找

Code: Select all

define('DIR_DOWNLOAD', '安裝路徑/download/');
取代

Code: Select all

define('DIR_DOWNLOAD', '安裝路徑/亂數名稱(例如:7PUFX0-9W-5K)/');
存檔

將預設的 download 目錄更名為上述名稱,並設定為 755 的讀寫權限。
就能停用 download 讀寫權限偵測,又不影響程式碼,對不需要下載型商品的用戶來說,這是正確的解決方案。

PS.上面的那段錯誤訊息,簡單來說就是要顯示這段文字的:

Code: Select all

$_['error_download']                = 'Warning: Download directory %s not writeable!';
結果卻只能顯示:

Code: Select all

Warning: fopen(/home/username/public_html/download/test) [function.fopen]: failed to open stream: Permission denied in /home/username/public_html/admin/controller/common/home.php on line 99
Warning: fclose(): supplied argument is not a valid stream resource in /home/username/public_html/admin/controller/common/home.php on line 103
Warning: sprintf() [function.sprintf]: Too few arguments in /home/username/public_html/admin/controller/common/home.php on line 106
這樣你們瞭解嗎?

Attachments

suPHP.png

suPHP 環境的安裝畫面。 - suPHP.png (123.61 KiB) Viewed 3855 times

mod_php5.png

mod_php5 環境的安裝畫面。 - mod_php5.png (125.51 KiB) Viewed 3855 times


HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm

Post by opencartchina » Wed Nov 20, 2013 11:32 am

我想我基本能瞭解你所說的。從目前我個人建議來看,建議用戶採用新的服務器配置或更好的服務器空間服務為好吧。

opencart系統還在繼續完善中,比如在緩存技術方面,會對服務器方面要求的更高些。因此,從將來維護以及升級來看,採用較新較高級的服務器空間是很有必要的。

OpenCart中国(http://www.opencartchina.com)
OpenCart中文论坛:http://www.opencartchina.com/bbs
Email: opencartchina@qq.com
QQ: 1487063622
OpenCart技术交流QQ 1群:282797742
OpenCart技术交流QQ 2群:298317506
OpenCart技术交流QQ 3群:198384554
OpenCart技术交流QQ 4群:227297836
中国版MyCnCart官方QQ群:473071696


New member

Posts

Joined
Thu Jan 31, 2013 10:38 am

Post by HAO » Wed Nov 20, 2013 4:46 pm

Code: Select all

$this->data['config_catalog'] = DIR_OPENCART . 'config.php';
$this->data['config_admin'] = DIR_OPENCART . 'admin/config.php';

$this->data['cache'] = DIR_SYSTEM . 'cache';
$this->data['logs'] = DIR_SYSTEM . 'logs';
$this->data['image'] = DIR_OPENCART . 'image';
$this->data['image_cache'] = DIR_OPENCART . 'image/cache';
$this->data['image_data'] = DIR_OPENCART . 'image/data';
$this->data['download'] = DIR_OPENCART . 'download';

Code: Select all

		if (!file_exists(DIR_OPENCART . 'config.php')) {
			$this->error['warning'] = 'Warning: config.php does not exist. You need to rename config-dist.php to config.php!';
		} elseif (!is_writable(DIR_OPENCART . 'config.php')) {
			$this->error['warning'] = 'Warning: config.php needs to be writable for OpenCart to be installed!';
		}
		
		if (!file_exists(DIR_OPENCART . 'admin/config.php')) {
			$this->error['warning'] = 'Warning: admin/config.php does not exist. You need to rename admin/config-dist.php to admin/config.php!';
		} elseif (!is_writable(DIR_OPENCART . 'admin/config.php')) {
			$this->error['warning'] = 'Warning: admin/config.php needs to be writable for OpenCart to be installed!';
		}

		if (!is_writable(DIR_SYSTEM . 'cache')) {
			$this->error['warning'] = 'Warning: Cache directory needs to be writable for OpenCart to work!';
		}
		
		if (!is_writable(DIR_SYSTEM . 'logs')) {
			$this->error['warning'] = 'Warning: Logs directory needs to be writable for OpenCart to work!';
		}
		
		if (!is_writable(DIR_OPENCART . 'image')) {
			$this->error['warning'] = 'Warning: Image directory needs to be writable for OpenCart to work!';
		}

		if (!is_writable(DIR_OPENCART . 'image/cache')) {
			$this->error['warning'] = 'Warning: Image cache directory needs to be writable for OpenCart to work!';
		}
		
		if (!is_writable(DIR_OPENCART . 'image/data')) {
			$this->error['warning'] = 'Warning: Image data directory needs to be writable for OpenCart to work!';
		}
		
		if (!is_writable(DIR_OPENCART . 'download')) {
			$this->error['warning'] = 'Warning: Download directory needs to be writable for OpenCart to work!';
		}
這些字串,姑且不論是 mod_php5 或 suPHP 的環境,唯一不變的共通點,就是可以寫入新的檔案,對此都有其風險。

至於是採用 mod_php5 或 suPHP 的環境,都跟虛擬主機商的經營策略有關,畢竟不是所有主機上的用戶,他們的程式都能支援 suPHP 的環境,假使要移機也是逐一轉移。

我想說的就是這樣。

HAO
Active Member

Posts

Joined
Fri Jun 03, 2011 2:52 pm
Who is online

Users browsing this forum: No registered users and 4 guests