php解密加密函数并运行它?

php解密加密函数并运行它?,php,eval,Php,Eval,这与如何加密和解密无关。我想知道从文本文件中检索并解密函数后是否可以运行该函数 例如,我将创建一个函数,该函数定义数据库密码,然后像加密文本字符串一样对其进行加密,然后将其写入文本文件 然后,我有一个函数,它将db密码定义为一个加密的不可读的乱码 当我需要密码时,我会获取文件内容并对其解密,但此时我需要能够将其作为函数运行,以便它将定义DB_password常量,但现在它只是字符串中的文本 就好像我刚刚做了这个一样: $var = "function define_password(){

这与如何加密和解密无关。我想知道从文本文件中检索并解密函数后是否可以运行该函数

例如,我将创建一个函数,该函数定义数据库密码,然后像加密文本字符串一样对其进行加密,然后将其写入文本文件

然后,我有一个函数,它将db密码定义为一个加密的不可读的乱码

当我需要密码时,我会获取文件内容并对其解密,但此时我需要能够将其作为函数运行,以便它将定义DB_password常量,但现在它只是字符串中的文本

就好像我刚刚做了这个一样:

$var = "function define_password(){
   if(!defined('DB_PASSWORD')){define('DB_PASSWORD', 'password');}
}";
很明显,我能做的就是回显它,因为它只是变量中的文本

那么,有没有办法让php将其视为函数而不是字符串变量

谢谢

即使它是多余的,它也是有教育意义的,所以我要发布使用Xenon指出的eval()方法的结果。 这是一个加密和隐藏的文件,名为。在www之外的目录中,没有任何内容可以以只读方式访问root拥有的www数据:

Pswo0DlrEPMNEs7ExyFs8Zh2n+bSj6yr4NI9zV7gTP9qFiesrFKLxsjoo3R3CnsYJNkojeo0v2gQtI4iJGLzKUS8zdhePLElk3BwhliB3dxYwvRkJFMqbtw7k/UBo0pHPLR/jVRnWq+cTByr0xp8p7X9v8Olbfrz4zwo+VXIDwLA6GsOJTK14Hy0E4jksgeuEQ7/PDtxCgWoMPQ2OomPwjFjukdrAofbF5jxU9zCUK5Cs1UZ8+PYA79w0lccEpUA9vWBPZ6Xuwhr4KuGeyoUCchK9wGgaXDD6Oc845OsmnR/wi+EMnYacvGGeLxN96wEAt9vh/dwmYIkHmpuBtPWUP1vRT/HzTv39HfXoFFKx1kGww4Xph/cjS8joYwAgh+C+LT61sBjlfazkDRNabpmZFd2yyocD+6lQeHrmKuvYxa0cfMSYa8ScAQaBz6Ycg99ldOinEbd+mTnZKltFialAoHOvha4Surc0XZX7vtFx1TxSMctjkgCmLw4bHhJ6B3htLkhOysb6Oz5M1rniogFwEZnFaqLsqD1etpYv1RpceB8FPSss7/Zu0vGwbGeSMldr06FeHylRlB6n25QiH3qaKieHuD8ErKvQjm3YAVCshU04ydR0lTU5ckKnFGGxAGtiXjK9rV3Hle69vk7RjtYJVVuPCbmdSETdE/zHem+w1THKw4/NUROdxiOIDYQtQ6oDY0ORiwAqjU9QHlqwFyadPrDG37AYXSCzLgwFCw76J6uGyYzDsIVDUnP6Dv3yV1yvjrpxAFb5lA9APrnU8qIgNrgEoaZAznpX91QQxt6ztgJFVHyOSyUP8DkkFpsPamHwg22jb1oUZlOVsCgzMSj9G1M4sgokW6lpQjXCtuDYXVrAwoWHk6Bh+UiBXVUoOPIvEjG4PtCIRQl84lEtKiUPAQSWA/7rgN1O308j9tRtNBzho2xYMTPg2g5DOS82RRSS7/ehGxEWlbh9cqig6Xux+oyLLXK4uIp8qA4kLqvuVX9w/UAfJRRfV89t5xQsshMP8TnFn3KrAZtGJ7lQDOduzMiHXpu9Wu91IsEfbHr/v2U0CD+sMc7h9K755fYpdNUptpaRvyz0sVZW96sldPsxY26LktnQaKIAAoDNgcIFbNOmGOBnIuUVOQBUVxbC+e2cYJy8xQsjsJBe0AChfTZB+Vi0TiERyA28OCti4T4PTA=
我在下面的代码中使用了加密函数,它来自stackoverflow上的某个人

<?php 
define('SALT', 'whateveryouwant');

function encrypt($text) 
{ 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SALT, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
}

function decrypt($text) 
{ 
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SALT, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
}

$dec_db = decrypt(file_get_contents('.nothing'));

eval($dec_db);



defineit();
echo ET_APP_USERNAME;

我认为您可能正在寻找的是,它接受一个字符串并将其作为PHP代码执行

使用时要非常小心,并注意以下警告:

eval()语言构造非常危险,因为它允许执行任意PHP代码。因此,不鼓励使用它。如果您已经仔细验证了除了使用此构造之外没有其他选择,请特别注意,在未事先正确验证的情况下,不要将任何用户提供的数据传递到该构造中

例如,你可以这样做:

$var=“函数定义\密码(){
如果(!defined('DB_PASSWORD')){define('DB_PASSWORD','PASSWORD');}
}";
eval($var);

我只想假设,如果您的站点遭到黑客攻击,攻击者将无法读取数据库密码。基于这一假设,我会说:

  • 能够获得加密密码的攻击者很可能也会获得解密密码的密码,并自行解密密码。一无所获
  • 为什么必须是设置密码的代码?只需加密密码本身。然后,当你解密它时,你将把密码作为一个字符串,这个问题就变得无关紧要了。我看不出需要执行的代码有什么好处
  • 要求执行任意代码只会给您带来更多的安全问题,甚至可能是代码注入

  • 如果你没有解释你想用这个实现什么,我不会说什么。然而,由于您的意思是,您试图通过所有这些实现的是读取存储在文件中的密码(出于某种原因在函数中),因此我强烈建议您检查您的攻击方法

    我将向您介绍
    parse\u in_file()的好处。


    如果可能的话,不要存储一个函数来简单地定义一个变量——有更好的方法可以做到这一点,使用ini文件是一个非常好/更好的选择。如果您想更方便地访问信息,您甚至可以让它
    定义()
    密码。

    尝试创建函数()。那就叫它吧。如果失败,它将返回NULL、FALSE或smth。

    您希望从中获得什么好处?我正在试验不同的安全路障,并在考虑数据库连接值是否在运行时才定义,而不是以明文形式写入配置文件,这将使黑客更难弄清楚。由于您的代码必须访问真实密码,因此如果攻击者能够访问加密密码并因此访问服务器,则无法使其更安全。无论您将在上面分层多少层加密,我都会在代码中添加一个
    var\u dump(DB\u PASSWORD)
    ,并将其连接到数据库。你试图保卫一个已经来不及保卫的地区。很好,deceze,但因为我在这里接受教育,假设你没有访问服务器的权限。这还是多余的吗?我的意思是,有没有其他方法可以通过端口尝试转储我的密码,而无需访问我的文件?首先,没有,默认情况下,除了服务器自愿提供的内容(即网站)之外,没有秘密后门可以访问服务器上的任何内容。如果有,网络上就没有安全了。因此,获得加密密码的唯一方法是从磁盘读取文件。无论攻击者如何做到这一点,他都会以同样的方式获取其他文件。即使他只能读取文件,他仍然可以获得所有解密代码,并按照相同的步骤解密密码。充其量这会让他慢下来一两分钟。如果eval将变量作为函数运行,那么这就是我要寻找的。不知道除了省略加密/解密部分之外,我还能问什么问题。实际上,我将通过解密一个加密字符串来获得$var的值。我不知道eval()。谢谢你的信息谢谢氙气。你回答了这个问题,尽管我可以从其他一些问题中看出为什么这是毫无意义的。我在这里找到了更多的信息,帮助我理解为什么评估是危险的
    eval()
    应该执行代码,这就像正常编写函数一样。你仍然需要调用该函数才能使用它。我会投票支持你回答我的问题,但我没有任何代表点,所以我不能投票:-)我不知道,我对编程还是有点陌生,不知道黑客可以从哪个方向攻击,所以我只是想想出一些东西来增加更多