【问题标题】:Corrupted files when downloaded via encrypted link通过加密链接下载时文件损坏
【发布时间】:2013-02-13 12:19:52
【问题描述】:

我们的产品是电子书,通过用于 WordPress 的 http://www.tipsandtricks-hq.com/ eStore 插件以 .epub 和 .mobi 格式提供,该插件会生成加密的下载链接。

  • 大约 5 天前突然出现问题,之前运行正常大约三个月

  • 当客户通过下载链接下载购买的产品时,所有 .epub 文件都会损坏,并且在尝试将 ePub 导入库时,Adobe Digital Editions 会出错

  • 所有 .mobi 文件在下载并加载到 Kindle 时都会损坏,Kindle 会出现类似错误

  • 我们尝试关闭 Google 网址缩短器,错误

  • 我们用IE、Chrome和Firefox测试过链接,错误

  • 我们在没有加密链接的情况下进行了测试,通过浏览器中的直接链接下载文件,它们工作正常,没有错误

我们学到了什么:

  • 我们已经测试过使用 FTP 以 ASCII 和二进制模式下载...使用 ASCII 时,我们会遇到与使用加密下载链接相同的错误

  • 用FTP传输的文件用ASCII和Binary后大小相同,但运行hash检查显示内容不同

  • 我们正在使用 FileZilla 在 PC 和 Mac 上通过 FTP 进行测试,但是错误只发生在 PC 上

  • 所以,我们假设这个问题与文件传输类型和电脑有关

  • 在 /home/foo/bar/wp-content/plugins/wp-cart-for-digital-products/download.php 我们看到 header("Content-Transfer-Encoding: binary");所以我们假设在使用加密链接时强制使用二进制

加密链接字符串中是否可能有一些字符强制使用 ASCII?以下是加密链接的示例:

https://fu.com/bar/download.php?file=LRtro6WQMN12ip%2BEcL0TYS8sMZmSKOlkRedVCZyfACsqSllzCAjDp%2FZJyfQ2oq0ZP6vg1EMrR%2FOFC4B3wGDHl3N0u0sulcBhIfkOJ0C0UQh6

这里是http头:

Status: HTTP/1.1 200 OK
Date: Wed, 27 Feb 2013 14:55:47 GMT 
Server: Apache 
X-Powered-By: PHP/5.3.17 
Set-Cookie: PHPSESSID=7d61c9dd6ecbd321bea8cffg4a25d5e8; path=/ 
Expires: 0 
Cache-Control: public 
Pragma: public 
X-CF-Powered-By: WP 1.3.9 
Content-Description: File Transfer 
Content-Disposition: attachment; filename="Some-File-Name-Which-Was-Replaced.epub" 
Content-Transfer-Encoding: binary 
Content-Length: 5088032 
Connection: close 
Content-Type: application/epub+zip

还有什么可能导致这种情况?我们的服务器会在 .htaccess 或 apache 配置设置中强制使用 ASCII 吗?

非常感谢

【问题讨论】:

  • 我们刚刚尝试使用二进制编辑器查看损坏文件与工作文件,发现损坏文件的开头有垃圾数据。 (根据这里的提示:stackoverflow.com/questions/4465135/…
  • 我们把二进制转成ascii,发现文件开头的垃圾数据是:ï°¿哪些是 HTML 代码:¿ = 倒问号。 ° = 度数符号。 ï = 带分音符号的拉丁文小写字母 i。现在我们正试图弄清楚这到底是从哪里来的! :) 来自 eStore 插件?从服务器?来自 Windows(因为它只发生在 Windows 上)?

标签: php wordpress binary download ascii


【解决方案1】:

我们的一位程序员在他的编辑器中使用了错误的字符编码。我们需要处理带有 UTF-8(BOM 关闭)的 PHP 文件,或者空格或换行符会以某种方式影响文件完整性:

UTF-8 BOM signature in PHP files

WordPress functions.php 中的违规代码行:if ($bom != b"\xEF\xBB\xBF")

我们的罪魁祸首 HTML 字符代码 ï°¿,我们从 HEX 值解码:EF BB BF 那是出现在损坏的 .epub 文件开头的垃圾数据。

functions.php 每次在 WordPress 中运行时总是输出这些垃圾数据。

很高兴我们终于找到了问题的根源,这让我们发疯了!哈哈哈!!!

祝你编程愉快

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2019-09-26
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多