是否将文件设置为私有文件并仅通过PHP脚本进行访问?(服务器内部)



我在共享主机中托管(我认为这不相关(。我想在php脚本中执行一些操作,这些操作包括从文件中读取。我希望任何人都不能访问该文件,只能通过php脚本访问(否则任何人都可以在没有权限的情况下通过访问链接获得该文件(。我该怎么做?

  • 通过URL将文件设置为私有/不可访问
  • 设置一个可以实际读取此文件的php脚本

谢谢。

您可以通过添加.htaccess来轻松禁止访问文件夹,代码如下:

deny from all

然后您仍然可以使用fopen()file_get_contents()通过PHP访问它

方法:.htaccess文件

如中所述https://stackoverflow.com/a/70365577/7335057,您可以使用.htaccess文件,只要您使用的是apache或兼容的Web服务器。

方法:唯一URL

具有长的随机链接也是完全合理的。https://example.com/usercontent/326a98f7a6c61fb3e37c310c414ca23b16948b4a/test.jpg

您需要确保使用暴力无法找到链接,并且只允许链接到当前用户可以看到的文件。

URL的326a98f7a6c61fb3e37c310c414ca23b16948b4a部分必须对每个用户都是唯一的。它可以而不是是散列的userId或类似的东西。

以下是如何为您的URL生成高度唯一但随机的字符串的示例:

$partLength = 10;
$fix = "your-app-node-1";
$time = microtime(true);
$random = random_int(1000000, 9999999);

$urlPart = substr(sha1($fix), -$partLength)."-";
$urlPart .= substr(sha1($time), -$partLength)."-";
$urlPart .= substr(sha1($random), -$partLength);

修复部分主要针对使用多个服务器的情况,因此id不会共线。

方法:根文件夹外的文件

并非所有共享web空间的宿主都允许这样做,但如果你的宿主允许,请将文件放在根目录上方的文件夹中,使其无法通过web请求访问。不过要注意路径遍历攻击。

根目录之外的文件通常仍然可以使用PHP访问。

最新更新