Проблема php eval / html / php - PullRequest
       9

Проблема php eval / html / php

1 голос
/ 24 августа 2011

Я пишу кодировщик / декодер страниц php / html ... Я знаю, что он уже существует, но это университетский проект, так что переходите на XDDD

Я кодирую страницы, которые хочу защитить, скажем гипотетически, с помощью base64_encode, и когда я получаю запрос на любую страницу, у меня есть загрузчик, который читает закодированную страницу, расшифровывает ее и с помощью eval выполняет ее. Настоящие проблемы возникают, когда я пытаюсь расшифровать и выполнить смешанную страницу php / html. Очевидно, что eval не может выполнить html-код, поэтому мой вопрос: действительно ли я с ума схожу от разбиения страницы, выполняя php-код и печатая html? А также, если я включаю закодированную страницу php или php / html, действительно ли мне нужно повторно использовать этот метод здесь?

Я надеюсь, что кто-то может действительно помочь мне, потому что до истечения крайнего срока у меня осталась неделя, и я не могу изменить проект на данный момент.

Крис здесь функция и первый вызов в $ param [0] У меня есть имя файла с именем

function MyInclude($filename)
{
// create the temp file
$temp_filename = "tmp.php";
$handle = fopen($temp_filename , 'w+');
if (!$handle)
  die('Error creating temp file');

// write the decrypted data, close the handle
$tmp=file_get_contents($filename);

$data=MCrypt_Decode($tmp,'PFL_EPU_V100_mia');

fwrite($handle,$data );
fclose($handle);

// start output buffering to contain any output the script creates
ob_start();

try {
 include($temp_filename);
} catch (Exception $e) {
 die('There was an error in the encrypted file, cannot process');
}

// get the output, clear the buffer
$output = ob_get_contents();
ob_end_clean();

//destroy the temp file
unlink($temp_filename);

// now you can output the buffer, if desired:
echo $output;
}

MyInclude($param[0]);

файл $ param [0] здесь

<?php
 session_start();
 $_SESSION['title']='Home';
 MyInclude("header.php");
?>

<body>
    sono il body <?php echo APP_PATH; ?>
</body>

<?
echo "boss";
 MyInclude("footer.php");
?>

есть идеи об этом ??? или вам нужен какой-то другой код ??? дай мне знать T_T

Mike

Ответы [ 6 ]

3 голосов
/ 24 августа 2011

Когда eval() встречает закрывающий тег php (?>), он перестает пытаться обрабатывать его как php-код и просто выводит все, пока не появится открытый тег php.

ТипичныйРешение вашей проблемы выглядит примерно так:

$file = ... //Your decoded php/html code here

$file = '?>' . $file; //Add a close tag to the beginning;

ob_start();
eval($file);
$output = ob_get_clean();

echo $output; //Or do something else with it... really, if you're 
              //just going to be echoing it you can skip the output buffering
3 голосов
/ 24 августа 2011

Вы можете eval () строка, которая содержит смешанные HTML и php, при условии, что теги включены.

http://php.net/manual/en/function.eval.php

2 голосов
/ 24 августа 2011

Можно ли расшифровать страницу, записать ее в файл, а затем include? Это позволило бы интерпретатору PHP делать то, что он делает лучше всего - интерпретировать документы PHP. Это будет включать комбинации HTML / PHP, не полагаясь на eval.

Схема этого будет:

// create the temp file
$temp_filename = "tmp.php";
$handle = fopen($filename , 'w');
if (!$handle)
  die('Error creating temp file');

// write the decrypted data, close the handle
fwrite($handle, $decrypted_data);
fclose($handle);

// start output buffering to contain any output the script creates
ob_start();

try {
 include_once($temp_filename);
} catch (Exception $e) {
 die('There was an error in the encrypted file, cannot process');
}

// get the output, clear the buffer
$output = ob_get_contents();
ob_end_clean();

//destroy the temp file
unlink($temp_filename);

// now you can output the buffer, if desired:
echo $output;

Ссылки на функции

fopen: http://us2.php.net/manual/en/function.fopen.php

fwrite: http://us2.php.net/manual/en/function.fwrite.php

fclose: http://us2.php.net/manual/en/function.fclose.php

ob_start: http://us2.php.net/manual/en/function.ob-start.php

ob_get_contents: http://us2.php.net/manual/en/function.ob-get-contents.php

ob_end_clean: http://us2.php.net/manual/en/function.ob-end-clean.php

unlink: http://www.php.net/manual/en/function.unlink.php

1 голос
/ 25 августа 2011

Вам потребуется выгрузить декодированный файл в другой файл и include(); его. Подход eval не будет работать, потому что он завершится с ошибкой разбора, если первый элемент в файле не является открывающим тегом <?php или допустимым битом кода PHP.

Более того, вам потребуется найти / заменить любые вхождения include(), require(), include_once() и require_once() в зашифрованном файле другой функцией, чтобы убедиться, что вы не пытаетесь выполнить другой зашифрованный файл, прежде чем он был расшифрован. Вы могли бы сделать это во время выполнения (то есть дешифрования), но для него было бы намного лучше время шифрования, чтобы минимизировать время, необходимое для предварительной выборки кода перед его выполнением.

Вы можете определить эти пользовательские функции, чтобы расшифровать файл и включить / потребовать его в своем скрипте загрузчика.

0 голосов
/ 24 августа 2011

Вы пытались расшифровать страницу, затем проанализировать текст, чтобы разделить что-либо между, а затем только выполнить этот код?

0 голосов
/ 24 августа 2011

Ваше описание проблемы немного расплывчато, однако ваша проблема, кажется, решаема с помощью буферизации вывода .

...