如何正确加载和HTML嵌入受密码保护的文件?

时间:2010-09-14 20:59:44

标签: php html safari password-protection

我有一个受密码保护的Apache目录,里面有文本文件和电影文件。目前,我使用cURL加载文本文件的内容,并使用CURLOPT_USERPWD传递用户名密码信息。对于电影,我将OBJECT和EMBED src设置为http://username:password@example.com/file.mov。在这两种情况下,用户名密码分别来自$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']。如果这不起作用,则会提示用户提供具有通用HTTP身份验证弹出窗口的新凭据。

有更合适的方法吗?或者嵌入受密码保护的电影只是一个错误/坏主意?

上述方法导致两个(相关的?)问题。首先,(据我所知)随机地,在嵌入电影时似乎没有传递username:password@部分,因此用户被迫再次输入他们的凭证。这很少发生,只是很烦人,但修好会很好。

其次,这会导致Snow Leopard下的Safari崩溃。 Safari一定会提示用户输入凭据,然后冻结。非密码保护的电影(或将受密码保护的电影移动到非密码保护的目录)加载正常。这个问题在Snow Leopard之前并不存在,但我还没有在Snow Leopard下的旧版本Safari上测试它,所以它可能是最近爆发的更新之一。

注意:由于使用这些文件的其他程序需要Apache密码保护,因此无法移动到另一个登录系统(从而否定问题),这是不可能的。

1 个答案:

答案 0 :(得分:2)

您是否在安全连接上?否则看起来好像用户名/密码是开放的窥探眼睛?

我倾向于使用服务器端脚本(例如serve_content.php)来管理受保护内容的服务。并链接到它:

src="serve_content.php?id=1234"

serve_content.php检查用户是否已登录。从传递的id中识别文件(掩盖受保护内容的真实位置),因此'1234'可能是'mymovie.avi'。并将文件发送到客户端。例如。使用readfile()和相应的标题。

Apache密码保护目录用于防止未经授权的直接访问。如果您通过其他方法记录您的用户,则没有用户只能通过serve_content.php直接访问该文件。