【问题标题】:Is there a way to blacklist PHP include() or require()'s access to file paths?有没有办法将 PHP include() 或 require() 对文件路径的访问列入黑名单?
【发布时间】:2021-03-18 16:38:27
【问题描述】:

这听起来像是一个愚蠢的问题,而我这样做的方式目前并不安全,所以我希望能够提高我的安全性并减少我被恶意使用的机会。

我有一个“管理面板”。我可以添加/删除用户并任命他们为管理员等。我可能让他们拥有的权限之一是编辑文件。这是一个问题,因为我将密码存储在文件中并通过.htaccess 限制对它们的 Web 访问(托管服务提供商的 MySQL 使用率很低)。

因此,我提供了一个文件黑名单。但是,如果人们将 PHP 文件编辑为 include()require() 登录处理文件并获取 root 帐户的会话密钥(这是我的登录处理脚本可以做的),然后劫持它并拥有root权限。

因此我想限制include/require的访问。

我想到的第一个想法只是简单地检查它是否需要/在他们编辑的文件的代码中包含该文件,但这似乎太“冒险”了。

然后,我想知道是否可以将某些文件/某些文件的 include/require 访问限制为仅特定 php 文件列表(例如需要该登录处理程序文件的登录/控制面板文件)。

如果不是,我是否应该完全取消文件编辑功能,因为即使我确实知道如何限制访问,这似乎也很冒险。

【问题讨论】:

  • “我是否应该完全取消文件编辑功能” 是的。 Web 服务器不应该对它所服务的文件有写访问权,更不用说远程用户了。这只是在问问题。
  • @AlexHowansky 我很害怕。此外,如果用户没有正确编程文件,也会导致错误。
  • 也许你可以参加会议?
  • @nice_dev 是的,但我已经将其设置为使用 cookie:/ 无论如何它都可以正常工作。

标签: php security authentication file-handling


【解决方案1】:

include() 不允许将路径限制为特定文件夹。 require()require_once()file_get_contents()highlight_file()fopen() 等也是如此......

您可以更改默认包含路径,但这是另一回事。仍然可以包括使用绝对路径或不同的相对路径。或者简单地使用不同的功能打印文件内容。

所以我的建议是完全禁止编辑文件。

如果您需要用户能够更新文本内容,请考虑使用翻译引擎(即使只针对一种语言)。如果他们还需要能够编辑样式,则可能与 markdown(存储在数据库中的 MD,转换为 HTML 以供显示)或来自所见即所得编辑器的 HTML 输出结合使用。

【讨论】:

  • 是的,仅仅允许编辑某些非 php 文件将是一件轻而易举的事,因为它们实际上不能使用任何 includerequire 或类似的(比如编辑 txt 文件。txt 文件不会t 被执行,所以那里没有太大的伤害)。看起来这可能是最好的方法(我从来没有见过一个网站有源代码编辑功能,反正......可能更好)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2015-04-10
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
相关资源
最近更新 更多