Ftp

FTP 傳輸期間歐元字元混亂

  • December 15, 2012

我的客戶在我的託管服務上使用了一個非常過時的電子商務管理系統。對於該產品,供應商不再提供支持。

簡要說明:聲稱在 LAMP 堆棧下執行的商店網站是由在 MS Access 上執行的舊 Visual Basic Windows 應用程序建構的。使用者建構商店、定義 HTML 模板、添加產品和類別等。

然後VB exe 建構 PHP 頁面(每個模板頁面一個)和 SQL 腳本以在 MySQL 上執行。它還通過 FTP 上傳所有內容並自行執行安裝/升級腳本。

問題

瀏覽網站,很多產品的描述都被剪掉了euro。例如,應該是“產品價格 €1000”變成“產品價格”

分析

  • MySQL 包含一個刪減的描述,直到 € 符號,所以這不是 PHP 的錯
  • Access 數據庫包含帶有€ 符號的完整描述,因此網站管理員編寫錯誤的描述或電子顯示切割它們不是錯
  • 網站上傳後將執行的 SQL,在上傳前儲存在我的本地電腦上,包含 € 符號
  • 同樣的腳本,在通過 eDisplay FTP 並從 SSH 使用 nano 打開後,顯示的 € 符號如下所示:
  • vsftpd 日誌報告(為隱私而混淆)Sat Dec 15 11:16:57 2012 22 xxx.xxx.128.13 1112727 /srv/www/domains/xxxxxx.it/htdocs/db.sql b _ i r xxxxxxx ftp 0 * c,這似乎是一個二進制傳輸(也是一個巨大的安全漏洞,因為您可以從未經身份驗證的 HTTP 下載整個數據庫)
  • eDisplay 內部 FTP 客戶端提供ascii/二進制傳輸模式的選項
  • $$ Add $$嘗試通過 SFTP 手動上傳 SQL 文件顯示弄亂了歐元
  • $$ Add2 $$嘗試使用具有顯式 ASCII 模式的 Xftp 客戶端手動上傳也無法修復

看起來文件作為二進製文件上傳。也許在客戶以前的主機上一切正常,因為那是一台 Windows 主機。

伺服器

它是一個執行 openSUSE 12.2 的 Azure 虛擬機,同時具有vsftpdopenSSH

問題

不要求客戶使用 FileZilla 手動上傳文件或替換€,因為他拒絕,我可以在伺服器端做些什麼來防止 vsftpd 搞砸歐元符號?

部分修復

通過設置 MySQL 的預設字元集不同於 UTF-8,我可以正確顯示歐元

來源

#default-character-set = utf8
collation-server = latin1_general_ci
#init-connect='SET NAMES latin1_general_ci'
character-set-server = latin1

第一行被評論是因為我的 MySQL 版本無法辨識第三行被評論是因為我在伺服器日誌中記錄的每個連接上都有一個錯誤並且連接被截斷(所以每個站點都離線)

我說修復是部分的,因為我繞過了 FTP 上傳並將 SQL 直接執行到帶有正確歐元符號的 phpMyAdmin

您可以嘗試更改 SQL 文件的編碼以及行分隔符。或者您可以將所有符號更改為€.

引用自:https://serverfault.com/questions/458340