2

我有 PDF.js 在我的服务器上工作,但我正在努力解决如何在不暴露我的文件路径的情况下实现它(或者理想情况下,将我的文件移动到 Web 根目录之外)。

例如,我可以在我调用http://example.com/view?file=yyy.pdf&subdir=zzz的地方实现一个传递 PHP

然后我可以使用 PDF.js 打开位于http://example.com/obscure/zzz/yyy.pdf的文件 (而不是调用http://example.com/viewer?file=http:/ /example.com/obscure/zzz/yyy.pdf

或者,更好的是,webfoot 之外的文件:/absolute/path/zzz/yyy.pdf

4

1 回答 1

0

NB 2013 年 3 月 26 日 - 抱歉,因为我将不得不撤回原始答案。

事实证明,HTTP_REFERER(总是拼写错误)在安全方面并不可靠,因为它很容易被欺骗。

我将在下面留下一些最初的想法,因为它显示了不应该做什么,相信它会是安全的,但首先会提出一个替代方案。

任何基于密钥的替代方案的基本挑战是,为了解锁非网站文件访问而来回发送的任何内容都将通过浏览器以各种方式可见,这是 PDF.js 实际运行并请求访问的地方。即使身份验证机制避开了主屏幕,或者如果使用 SSL 来保护通道,这也是正确的。

目前我能想到的最好的方法是一个有时间限制的密钥,接受这有一些实际困难。然而,即使我们看到的网络偶尔会变慢,时间窗口也可能相当短,因为密钥访问发生在下载文档的开始。

SSL 将是任何高安全性安排的要求,否则网络连接可能会被窥探并在超时内重新使用密钥。启动 PDF.js 的身份验证系统需要与文档网关协调,以获取 PDF.js 用来回调和获取访问权限的密钥。这可以使用 CMS 数据库可能实现的服务器上消息传递来完成。

因此,这看起来像是一种可能的设计,即使不是一个小时内完成的设计。如果 SSL 用于原始用户登录以及基于时间的密钥,它可能被认为与在线银行一样安全,包括现实生活中的人员因素。

以下是原始有缺陷的想法的感觉,供参考:

通过使用 .htaccess 条件仅允许本地提供的 pdf.js 文件对保存 pdf 的目录的权限,似乎有一个简单但现在看到的错误答案来保护文件。该目录需要在网站内,因为 pdf.js 访问的是网络空间而不是文件空间。这是条件和响应的形式,您可以针对您的 url 和 pdf.js 位置进行调整:

Options -Indexes
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^(http|https)://(www.)?yourdomain\.com/yourfolder/s/pdf\.js$
RewriteRule .* - [F]
于 2013-03-26T04:48:55.143 回答