我的PDF.js正在我的服务器上工作,但我正在努力实现它而不暴露我的文件路径(或理想情况下,将我的文件移到Web根目录之外)。
e.g。我可以实现我调用的传递PHP吗? http://example.com/view?file=yyy.pdf&subdir=zzz
然后我可以使用PDF.js打开位于http://example.com/obscure/zzz/yyy.pdf的文件 (而不是叫http://example.com/viewer?file=http://example.com/obscure/zzz/yyy.pdf)
OR,更好的是,webfoot外的文件: /absolute/path/zzz/yyy.pdf
答案 0 :(得分:0)
N.B。 2013年3月26日 - 道歉,因为我将不得不撤回原来的答案。
事实证明,HTTP_REFERER(总是错误拼写)对于安全性来说是不可靠的,因为它很容易被欺骗。
我将在下面留下一些原始想法,因为它显示了什么不该做,相信它会是安全的,但首先会提出一个替代方案。
任何基于密钥的替代方案的基本挑战是,无论来回发送什么来解锁网站外文件,都可以通过浏览器以各种方式查看,这是PDF.js实际运行并请求访问的位置。即使身份验证机制避开主屏幕,或者使用SSL来保护频道,也是如此。
目前我能想出的最佳方法是限时关键,接受这有一些实际困难。但是,即使我们看到它们偶尔出现网速下降,时间窗口也可能相当短,因为密钥访问发生在下载文档的开头。
SSL将是任何高安全性安排的要求,否则可以窥探网络连接并在超时内重新使用密钥。启动PDF.js的身份验证系统需要与文档网关协调,以便PDF.js用来回调和获取访问权限。这可以使用CMS数据库可能实现的服务器上消息传递来完成。
因此,这看起来像是一种可能的设计,如果不是一个人在一小时内完成的话。如果SSL用于原始用户登录以及基于时间的密钥,则可以认为SSL与在线银行业务一样安全,包括现实生活中的人员因素。
这是原始有缺陷的想法,供参考:
通过使用.htaccess条件仅允许本地提供的pdf.js文件对保存pdf的目录的权限,似乎有一个简单但现在看到的用于保护文件的错误答案。该目录需要在网站内,因为pdf.js访问Web空间而不是文件空间。这是条件和响应的形式,您可以调整您的url和pdf.js位置:
Options -Indexes
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^(http|https)://(www.)?yourdomain\.com/yourfolder/s/pdf\.js$
RewriteRule .* - [F]