问题描述
||
(我知道这可能是一个简单的问题,但是我不知道该怎么办。很抱歉,以前是否有人问过这个问题。)
我想要的是。我想要服务器上要过滤的链接列表。这些文件是文档(pdf文件)。我了解如何使用PHP限制对链接列表的访问,但是可以只在浏览器中输入指向文件的直接链接并下载文件。因此,我想保护PHP文件密码(链接列表),并使人们仅输入一次密码。
我有的。到目前为止,我有documents.PHP(可在互联网上找到):
<?PHP
$username = \"name\";
$password = \"5f4dcc3b5aa765d61d8327deb882cf99\";
if ($_POST[\'txtUsername\'] != $username || md5($_POST[\'txtPassword\']) != $password) {
?>
<h1>Login</h1>
<form name=\"form\" method=\"post\" action=\"<?PHP echo $_SERVER[\'PHP_SELF\']; ?>\">
<p><label for=\"txtUsername\">Username:</label>
<br /><input type=\"text\" title=\"Enter your Username\" name=\"txtUsername\" /></p>
<p><label for=\"txtpassword\">Password:</label>
<br /><input type=\"password\" title=\"Enter your password\" name=\"txtPassword\" /></p>
<p><input type=\"submit\" name=\"Submit\" value=\"Login\" /></p>
</form>
<?PHP
}
else {
?>
<p>Link to documents</p>
<p><a href=\"http://example.com/folder/file.pdf\">file.pdf</a></p>
<?PHP
}
?>
但是有了这个,一个人可以直接通过浏览器访问该文件,其链接为:http://example.com/folder/file.pdf。
如何防止这种情况?
(我对PHP,JavaScript和基本HTML感到满意)
谢谢,
汤玛士
解决方法
通过php中介访问文件
将文档放在您的webroot之外,并在php文件中保留指向它们的路径的命名数组。当客户端按名称请求文件时(在对它们进行身份验证之后),请在阵列中向上查找文件的路径,并从文件系统中读取文件,然后将其内容输出回他们。
这就是readfile的目的。
,与quasistoic的答案类似-除了使用Web服务器(例如Apache或nginx)为PDF文件提供受保护的/内部的URL(因此,不仅仅是Webroot中的静态URL),然后使用X-Sendfile (或者,如果在nginx上为X-Accel-Redirect)标头,则无需通过PHP流式传输文件即可发送文件。