繁体   English   中英

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

[英]Set a file as private and access only through PHP script? (Inside a server)

我的主机托管在共享主机中(我认为这无关紧要)。 我想在 php 脚本中执行一些操作,这些操作包括从文件中读取。 我希望任何人都无法访问该文件,只能通过 php 脚本访问(否则任何人都可以通过访问链接在未经许可的情况下获取该文件)。 我怎样才能做到这一点?

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

谢谢。

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

deny from all

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

方法:.htaccess文件

https://stackoverflow.com/a/70365577/7335057中所述,您可以使用 .htaccess 文件,只要您使用的是 ZB6EFD606D118D0F620666E 或兼容的 webserver3。

方法:唯一 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);

修复部分主要用于当您使用多个服务器时,因此 ids 不会发生冲突。

方法:根文件夹外的文件

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM