使用PHP限制访问静态内容/通过htaccess进行身份验证?

时间:2010-08-13 16:21:59

标签: php authentication

我正在开发一个带有php / apache的LMS解决方案,该解决方案接收SCORM文件并输出用户以http://www.example.com/courses/course1/index.html

格式进行的课程

任何人都可以访问LMS本身,因为课程内容是静态的HTML,我似乎没有很多关于身份验证的选项。

我原本以为在文件夹中创建一些htaccess / htpasswd文件是可以的,但我看不到在php中验证用户的方法,因此每次他们想要查看时都没有显示密码提示当然 - 他们之前已经在我的应用程序中进行了身份验证。

有没有人知道保护静态内容的最佳方法,以便授权(通过我的php应用程序)用户可以正常查看内容,但其他人什么都看不到?

1 个答案:

答案 0 :(得分:1)

如果PHP处理登录本身,最简单的选择是通过PHP本身提供内容。

您可以将静态文件放在未映射到URL空间的目录中,也可以放在拒绝所有请求的目录后面的映射URL中,然后使用readfile

//request to /download_static.php?file=xxxx.rtf
if (!has_access())
    die("unauthorized");

if ($f = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_STRING,
        FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH)) {
    if (strpos($f, "/") || strpos($f, "..") || !file_exists("statics/$f"))
        die("no such file");
} else {
    die("invalid request");
}
header("Content-type: application/rtf"); //or whatever
//can also sent e-tag, last modified, size...

readfile("statics/$f");

另一个选项,只有PHP可以作为Apache模块安装,是进行身份验证然后调用virtual