English 中文(简体)
为 PDF 创建安全文件主机服务器
原标题:Creating a Secure File Hosting Server for PDFs
  • 时间:2012-05-24 19:11:58
  •  标签:
  • php
  • pdf
  • ftp

我正努力开发一个网站,让客户能够登录并查看服务器上保存的各种 < code> PDFs 。 这些 PDFs将是客户独有的, 不应被未登录的人访问。 将文件存到服务器不应该是一个问题, 我只是不确定如何为终端用户服务 。

我用 SQL 服务器 提供的数据而不是文件来实施这种操作, 所以我不完全确定最有效的方法是什么。

网站在 LAMP 上,我的经验微乎其微,在 PHP 上(但如果框架或其他语言能让问题更加容易,我可以学习)。

我可能有点过头了,但我通常都是,所以任何投入都会很好。

最佳回答

将文件放入 Web root 外部。 然后使用 PHP 将文件通过脚本传递给文件。 这样没有人可以直接链接到文件, 并绕过您的控制 。 ( 在验证用户是否允许检索文件后, 才能确保此操作的脚本 。)

PHP 样本 :

<?php
    session_start();
    if (!isset($_SESSION[ authenticated ])) {
        exit;
    }
    $file =  /path/to/file/outside/www/secret.pdf ;

    header( Content-Description: File Transfer );
    header( Content-Type: application/octet-stream );
    header( Content-Disposition: attachment; filename=  . basename($file));
    header( Content-Transfer-Encoding: binary );
    header( Expires: 0 );
    header( Cache-Control: must-revalidate, post-check=0, pre-check=0 );
    header( Pragma: public );
    header( Content-Length:   . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
?>
问题回答

简单的方式是给这些文件提供长长的随机文件名(比如 20 个随机字符 ) 。 从技术上讲,这些文件会被任何人访问,但无法猜测 URL, 因此只有被授权的人才能访问 。

换句话说, John Conde已经从 PHP 脚本中勾勒出一种提供文件的方法。 它会受到小的性能处罚, 但会和您的代码一样安全。 我只能补充的是, 如果您不能将文件放在网络根之外, 那么您也许可以使用.ht 访问 来阻止人们直接访问文件 。

John 张贴了这样做的主要正确方法, 所以我添加了一种( 可能是低级的) 替代方法 : 从数据库中获取 。 只要为 PDF 设置一个 BLOB 列, 并从数据库中读/ 存储文件数据 。 你最后会有一个相当大的表格, 但是它会起作用 。 服务它需要设置和 John 一样的 < code> header () , 你只需要从 DB 发送数据, 而不是从文件发送 。

这样做的好处在于 不必确保您不发生文件名碰撞,等等。





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签