Php 使用eval读取加密文件

Php 使用eval读取加密文件,php,eval,mcrypt,Php,Eval,Mcrypt,我有一个php文件,它是用mcrypt加密的,现在我们需要解密它 以下是解密: abstract class Encryption_Abstract { const CYPHER = 'blowfish'; const MODE = 'cfb'; protected $key; public function __construct($key) { $this->key = $key; } public functio

我有一个php文件,它是用
mcrypt
加密的,现在我们需要解密它

以下是解密:

abstract class Encryption_Abstract {
    const CYPHER = 'blowfish';
    const MODE = 'cfb';
    protected $key;
    public
    function __construct($key) {
        $this->key = $key;
    }
    public function encrypt($plaintext) {
        return $plaintext;
    }
    public function decrypt($crypttext) {
        return $crypttext;
    }
}
//decryptor
class Decryption extends Encryption_Abstract {
    function decrypt($crypttext) {
        $plaintext = '';
        $td = mcrypt_module_open(self::CYPHER, '', self::MODE, '');
        $ivsize = mcrypt_enc_get_iv_size($td);
        $iv = substr($crypttext, 0, $ivsize);
        $crypttext = substr($crypttext, $ivsize);
        if ($iv) {
            mcrypt_generic_init($td, $this - > key, $iv);
            $plaintext = mdecrypt_generic($td, $crypttext);
        }
        return $plaintext;
    }
}
下面是我们如何实例化它,然后使用它:

$enc = new Decryption(KEYS::PROD);  //KEYS::PROD is the decryption key
eval($enc->decrypt(file_get_contents("key_file.txt"))); //<--
$enc=新解密(密钥::PROD)//KEYS::PROD是解密密钥

eval($enc->decrypt(文件获取内容(“key\u file.txt”))// 如果它是一个PHP文件,并且您需要执行它,那么您可以通过管道将其传输到
PHP
cli。。但也会是一样的。但是,您希望如何在不执行PHP文件的情况下执行它呢?:)

如果它是一个PHP文件,并且您需要执行它,您可以通过管道将它传输到
PHP
cli。。但也会是一样的。但是,您希望如何在不执行PHP文件的情况下执行它呢?:)

您可以将解密的内容存储在临时文件中,包括它,然后删除:

$contents = $enc->decrypt(file_get_contents("key_file.txt"));

$tmpFile = tempnam('/tmp', 'decrypted.');
file_put_contents($tmpFile, $contents);

include $tmpFile;

unlink($tmpFile);

您可以将解密的内容存储在临时文件中,包括该文件,然后删除:

$contents = $enc->decrypt(file_get_contents("key_file.txt"));

$tmpFile = tempnam('/tmp', 'decrypted.');
file_put_contents($tmpFile, $contents);

include $tmpFile;

unlink($tmpFile);

@Gabi,总之,我必须使用
eval()
?@Neal你不必这么做,但其他解决方案也有类似的安全问题。@Gabi,如果我们对文件加密,真的不应该有问题吗?我们这样做的唯一原因是这样我们的客户就不能摆弄我们了it@Neal当然,如果代码属于您并且您信任它,这没有问题。是的,正如Gabi所说,只要代码属于您并且您信任它,就可以继续使用
eval()
。但是,如果客户端的服务器拥有加密密钥,以便通过编程方式解密和评估文件,他们难道不能找到该密钥并使用它来处理代码吗?@Gabi,因此,总之,我必须使用
eval()
?@Neal您不必这样做,但其他解决方案也有类似的安全问题。@Gabi,如果我们对文件加密,真的不应该有问题吗?我们这样做的唯一原因是这样我们的客户就不能摆弄我们了it@Neal当然,如果代码属于您并且您信任它,这没有问题。是的,正如Gabi所说,只要代码属于您并且您信任它,就可以继续使用
eval()
。尽管如此,如果客户端的服务器拥有加密密钥以便以编程方式解密和评估文件,他们难道不能找到该密钥并使用它来修改代码吗?问题是,有一个微小的变化,他们可以看到加密文件包含的内容(我们并不真正想要)@Neal,您的父脚本包含解密文件所需的方法(密钥+算法),因此您基本上没有任何安全性。@MarcB此代码所在的文件已被模糊处理(客户端根本无法读取)。问题是,有一个微小的更改,他们可以看到加密文件包含的内容(我们并不希望如此)@Neal不管怎样,您的父脚本包含解密文件所需的方法(密钥+算法),因此您基本上没有任何安全性。@MarcB此代码所在的文件被混淆(客户端根本无法读取)