gpt4 book ai didi

php - 如何防止用户操纵文件系统

转载 作者:行者123 更新时间:2023-12-01 22:19:50 26 4
gpt4 key购买 nike

信息

我在 Heroku 中有一个 phpfiddle 应用程序,用户可以在其中使用任何 php 代码。

基本上这是应用程序结构(样本):

/app/
|
|--fiddle/ <-- contains all php fiddles generated by the user.
| |
| |-- abcde/ <-- random directory.
| |
| |--index.php <--- custom user code.
|
|--app.php <--- entry point and main app file.

用户可以在他们的帐户中有多个 phpfiddle,每个都对应于一个随机目录index.php文件通过 <iframe> 执行稍后。

问题

如何避免任何应用程序用户可以通过 index.php 创建/列出/删除其随机目录之外的任何文件/目录文件?

研究

我目前的解决方案是解析 PHP 用户代码(在执行之前)并检测所有可能的函数,例如 file_put_contents() , unlink() , mkdir() , dir() , rmdir()和其他人,但这限制了测试范围,我需要用户可以在他们的上下文中使用这些函数。

恐怕我需要根据资源执行(我猜)“动态地”为文件系统设置特殊权限。怎么做?有可能实现吗?

编辑:目前php.net/runkit尚不支持 PHP 7 ( https://github.com/zenovich/runkit/issues/87 ),但在这种情况下这是必需的。

最佳答案

实际上,不。运行这样的服务的安全隐患需要大量的技术规划和基础设施。

要了解问题的严重性,有一家公司提供此类服务(ideone.com,无隶属关系)。它的母公司 Sphere Engine 将此作为一项服务提供,以在安全环境中运行不受信任的代码。

特别是在 Heroku 上运行,如果您的服务被恶意使用(例如,使用 PHP 的 mail() 发送大量垃圾邮件,使用 PHP 的 CuRL 通过 DoS 攻击其他用户),您的服务可能会让您很头疼。这些问题会扩展到一个用户删除另一个用户的文件,并且可能会让你被 Heroku 禁止。恶意行为者可以并将找出绕过您系统的方法。

--

为了更进一步,让我们考虑一下理论上您需要做什么才能完成这样的任务。

您将从使用 Docker 之类的东西开始,这是一种本质上像操作系统一样运行的容器。您需要配置环境,以便在容器上运行的代码无法访问互联网,受 CPU 时间限制,并在每次代码执行后被销毁。

每次用户提交代码时,您基本上都会将代码复制到容器中并允许代码运行。然后,您将能够捕获容器的输出并将其返回给用户。

这是您完成此任务所需的非常粗略的概述。

关于php - 如何防止用户操纵文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40939717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com