[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выполнение произвольного кода PHP
Winston
Всем привет. Как можно передать произвольный код в eval, чтобы он выполнился без ошибок?
Например как выполнить такой код
Свернутый текст
<?php include_once PHIS_PATH . VIEW_DIR . 'baseTpl' . DS . 'top' . V_EXT; ?>

<?php
if(isset($userInfo) && !empty($userInfo['date'])) : ?>
<div class="userInfo" id="userInfo">
<
span id="user">Пользователь:</span> <b><?php echo $userInfo['name']; ?></b>
<
a href="#" OnClick="document.location.href='index.php'">X</a><br/>
<
span id="regDate">Зарегистрирован:</span> <b><?php echo $userInfo['date']; ?></b>
</
div>
<?php endif; ?>

<?php

if(!empty($listUserSearch)) : ?>
<div class="searchUserList">
<
span class="countSearch">По запросу: <u><?php echo ($_GET['search']); ?></u><br/>
Найденно: <?php echo $countSearch; ?> совпадения</span><br/>
<
ul>
<?php foreach($listUserSearch AS $key => $val) : ?>
<li><a href="?search=<?php echo ($_GET['search']); ?>&id=<?php echo $val['id']; ?>"><?php echo $val['name']; ?></a></li>
<?php endforeach; ?>
</ul><br/><br/>
</
div>
<?php elseif(isset($_GET['search']) && $_GET['search'] == NULL) : ?>
<span class="notFound">Критерии поиска не заданы !</span>

<?php elseif($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['search'])) : ?>
<span class="notFound">По запросу: <u><?php echo isset($_GET['search']) ? ($_GET['search']): ''; ?></u><br/>
Ничего не найденно !</span><br/>
<?php endif; ?>

<?php
if(!empty($userList)) : ?>
<div class="countReg">
Зарегистрировано: <?php echo $countRegUsers; ?> пользователей
</div>
<
div class="userList">
<
ul>
<?php foreach($userList AS $key => $val) : ?>
<li><a href="?id=<?php echo $val['id']; ?>"><?php echo $val['name']; ?></a></li>
<?php endforeach; ?>
</ul>
</
div>

<?php else : ?>
<h2>Не зарегистрировано не одного пользователя !</h2>
<?php endif; ?>

<br/><br/>
<
form name="registration" action="" method="POST">
<
b>Введите имя:</b><br/>
<
input type="text" name="regName" value="<?php echo isset($_POST['regName']) ? $_POST['regName'] : ''; ?>"><br/>
<
input type="submit" name="regBtn" value="Зарегистрировать">
</
form>

<
form name="searchUser" action="" method="GET">
<
b>Поиск:</b><br/>
<
input type="text" name="search" value="<?php echo isset($_GET['search']) ? ($_GET['search']) : ''; ?>"><br/>
<
input type="submit" value="Искать">
</
form>

<?php include_once PHIS_PATH . VIEW_DIR . 'baseTpl' . DS . 'footer' . V_EXT;?>


eval писал уже и так
eval($_POST['code'])

И так
eval('?>'.$_POST['code'].'<?php')

Ну в разных вариантах разный затык, то
Цитата
Parse error: syntax error, unexpected '<'

То
Цитата
Parse error: syntax error, unexpected '<'

Выдает :(
Вот как здесь поступить, чтобы любой код отрабатывал ?

PS: о не безопасности затеи говорить не надо мне :)



Спустя 7 минут, 55 секунд (3.11.2011 - 01:16) Игорь_Vasinsky написал(а):
А это как понимать

Цитата
Запомните, что передаваемая строка обязана быть правильным кодом PHP


короче попробуй в base_64 может...

Спустя 4 минуты, 40 секунд (3.11.2011 - 01:21) killer8080 написал(а):
можно так
eval('?>'.$_POST['code']);

php тэги должны быть парными, интерпретатор прощает подобные ошибки, но только не в eval.

Спустя 4 дня, 21 час, 4 минуты, 10 секунд (7.11.2011 - 22:25) Winston написал(а):
Спасибо. С этим разобрался, но вот еще затык, у меня есть например такой код (Рисует эллипс)
Свернутый текст
<?php
header ("Content-type: image/png");
$im = imagecreatetruecolor(320, 240);
$ink = imagecolorallocate($im, 255, 255, 255);

imageellipse($im,160,120,200,150,$ink);

imagepng($im);
imagedestroy($im);
?>

Но вот когда я вставляю этот код в форму для выполнения, то в результате получаю исходный код картинки (короче говоря крякозябры). Пробовал использовать буферизацию, дык тогда после выполнения вообще белый экран :blink:
Как можно разрешить данную траблу ?

Спустя 17 минут, 27 секунд (7.11.2011 - 22:42) imbalance_hero написал(а):
Winston
А как ты вставляешь? <img src="image.php" ?

Спустя 16 минут, 12 секунд (7.11.2011 - 22:59) killer8080 написал(а):
Цитата (Winston @ 7.11.2011 - 22:25)
Пробовал использовать буферизацию, дык тогда после выполнения вообще белый экран blink.gif

Наверно это потому, что ты рисуешь белый эллипс на белом фоне smile.gif

Попробуй поменять цвет, и посмотри что получиться.

Спустя 5 минут, 49 секунд (7.11.2011 - 23:04) killer8080 написал(а):
Winston
пардон, был не прав, по умолчанию фон черный.
Но твой код в eval прекрасно работает
eval('
header ("Content-type: image/png");
$im = imagecreatetruecolor(320, 240);
$ink = imagecolorallocate($im, 255, 255, 255);

imageellipse($im,160,120,200,150,$ink);

imagepng($im);
imagedestroy($im);
'
);

Спустя 13 часов, 56 минут, 9 секунд (8.11.2011 - 13:00) Winston написал(а):
Цитата (imbalance_hero @ 7.11.2011 - 21:42)
А как ты вставляешь? <img src="image.php" ?

Нет не так. У меня на одной странице должна быть и форма и результат работы.
Вот
Свернутый текст
user posted image

В верхнем поле вставляется код, в нижнем должен быть результат работы.
Но т.к. результат должен выводится в div'е, то до того как будет выведена картинка, на экране уже будет вывод тега <div> потому и header ругается и выдается код картинки. Есть у кого какие идеи, как реализовать ?

Спустя 30 минут, 41 секунда (8.11.2011 - 13:31) twin написал(а):
Без тега не обойтись. Попробуй сохранять в файл, а не исполнять евалом. Безопасность, как я понял, тебя не волнует же.

Спустя 4 часа, 7 секунд (8.11.2011 - 17:31) killer8080 написал(а):
Цитата (Winston @ 8.11.2011 - 13:00)
В верхнем поле вставляется код, в нижнем должен быть результат работы.
Но т.к. результат должен выводится в div'е, то до того как будет выведена картинка, на экране уже будет вывод тега <div> потому и header ругается и выдается код картинки. Есть у кого какие идеи, как реализовать ?

картинка - это картинка, html - это html, нельзя всё в один вывод запихнуть. В хтмл должен быть тэг img обязательно.
Сделай две формы. В одной выводишь хтмл, другая сохраняет код в php файл, который и будет указан в src картинки в первой форме.

Спустя 1 час, 10 минут, 14 секунд (8.11.2011 - 18:42) Winston написал(а):
В общем решил использовать фреймы (frame) и делить окно на две части.
Но вот опять залип на одном месте, как передавать динамически значение второму фрейму. Есть мысль насчет того, чтобы изменять атрибут frame src на page.php?code=code но никак не получается добраться до атрибута src с помощью JS sad.gif

Спустя 11 минут, 23 секунды (8.11.2011 - 18:53) m4a1fox написал(а):
Winston
Цитата
не получается добраться до атрибута src с помощью JS

А JQuery?

Спустя 3 минуты, 42 секунды (8.11.2011 - 18:57) Winston написал(а):
Нет, jq не катит...
Но уже вроде, что-то начинает прояснятся smile.gif

Спустя 25 минут, 56 секунд (8.11.2011 - 19:23) ZSH написал(а):
примерно так?
<form style="display: inline;" action="eval.php" method="post" target="my-iframe">
<textarea
name="code"></textarea>
<input
name="submit" type="submit" value="Выполнить">
</form>
<iframe
id="my-iframe" name="my-iframe"></iframe>


при нажатии "отправить" страница не перегружается, ответ от сервера приходит в фрейм.
обрати внимание на название атрибутов FORM и IFRAME

Спустя 1 час, 33 минуты, 13 секунд (8.11.2011 - 20:56) Winston написал(а):
Все. Проблема решена. Всем спасибо.
Помогли фреймы, frameset и frame.

Спустя 15 минут, 53 секунды (8.11.2011 - 21:12) Winston написал(а):
Ну вот еще фигня, то что нельзя с помощью htaccess задать disabled_functions а фильтр писать... Его не сложно будет обойти sad.gif

Спустя 6 минут, 9 секунд (8.11.2011 - 21:18) killer8080 написал(а):
Цитата (Winston @ 8.11.2011 - 21:12)
Ну вот еще фигня, то что нельзя с помощью htaccess задать disabled_functions а фильтр писать...

А зачем, вроде ж говорил, что вопрос безопасности не волнует?

Спустя 3 минуты, 51 секунда (8.11.2011 - 21:22) Winston написал(а):
Цитата (killer8080 @ 8.11.2011 - 20:18)
А зачем, вроде ж говорил, что вопрос безопасности не волнует?

biggrin.gif не волновал до тех пор пока не сделал то, что нужно...

Спустя 1 минута, 34 секунды (8.11.2011 - 21:23) killer8080 написал(а):
А что хоть нужно было, если не секрет. smile.gif

Спустя 2 минуты, 32 секунды (8.11.2011 - 21:26) Winston написал(а):
Цитата (killer8080 @ 8.11.2011 - 20:23)
А что хоть нужно было, если не секрет

В заголовке написано smile.gif

В форму вставляется произвольный php код, а под формой показывается результат его работы...
Типа этого только для PHP.

Спустя 29 минут, 4 секунды (8.11.2011 - 21:55) killer8080 написал(а):
Цитата (Winston @ 8.11.2011 - 21:26)
В форму вставляется произвольный php код, а под формой показывается результат его работы...

Ну это понятно, в смысля отладчик для себя или публичный проект? Если для себя, то просто вводишь ограничение по ip. Вообще eval не самый лучший вариант для таких целей, ошибки ловить не удобно :) Для себя пользую такой код
Свернутый текст
<?php

header("Content-Type:text/html; charset=utf-8");
$_SERVER['REMOTE_ADDR'] == '127.0.0.1' || die('Restricted Access');

ob_start();
error_reporting(E_ALL);
$php_tag = "<?php\r\n\r\n";
if(isset($_POST['eval']))
file_put_contents('eval.tmp.php', $php_tag . $_POST['eval']);
?>
<form action="" method="post">
<
textarea name="eval" cols="100" rows="20"><?php
if(isset($_POST['eval']))
echo $_POST['eval'];
elseif(file_exists('eval.tmp.php'))
echo file_get_contents('eval.tmp.php', false, null, strlen($php_tag));
?></textarea>
<
br />
<
input type="submit" />
</
form>
<
div style="border: 2px solid #00A; background-color: #FDFDCA; padding: 10px;">
<?php highlight_file('eval.tmp.php'); ?>
</div>
<
hr />
<?php

if(file_exists('eval.tmp.php'))
include 'eval.tmp.php';

?>

Спустя 38 минут, 27 секунд (8.11.2011 - 22:33) Winston написал(а):
Цитата (killer8080 @ 8.11.2011 - 20:55)
для себя или публичный проект

Мини заказ.
Цитата (killer8080 @ 8.11.2011 - 20:55)
Для себя пользую такой код

Афигенно !!! супер !

Вот бы еще мой код (который эллипс рисует) выдавал картинку, а не каракули... А вообще идея супер !

Спустя 19 минут, 8 секунд (8.11.2011 - 22:52) killer8080 написал(а):
Цитата (Winston @ 8.11.2011 - 22:33)
Вот бы еще мой код (который эллипс рисует) выдавал картинку, а не каракули...

ZSH предложил хороший способ с ифреймом, не проверял, но должно работать smile.gif

Спустя 15 часов, 16 минут, 39 секунд (9.11.2011 - 14:09) Winston написал(а):
ZSH
Большое спасибо. Твое решение это просто шик! То что надо !
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.