2013-06-28 3 views
0

Можно ли разместить PHP-код по форме html, а затем запустить его как PHP?Возможно ли запустить html опубликованные данные как PHP-код?

что-то вроде этого

<form action="#" method="post"> 
<textarea name="code"></textarea><br> 
<input type="submit" value="Run!"> 
</form> 

<?php 

if (!empty($_POST['code'])) { 
    $_POST['code']; // Run the Posted PHP code here 
} 

?> 

так, если я типа

<?php echo 'this is a test'; ?> 

в моем текстовое поле, а затем отправить форму он будет эхо «это тест» из

РЕДАКТИРОВАТЬ ПОСЛЕ ОТВЕТОВ

спасибо вам, ребята, я не знал, что функции Eval(), я предполагаю, что я также могу это сделать для защиты от хакеров:

<form action="#" method="post"> 
<textarea name="code"><?php echo $_POST['code']; ?></textarea><br> 
<input type="password" name="pass"><br> 
<input type="submit" value="Run!"> 
</form> 

<?php 

$pass = 'A SHA2 HASHED PASSWORD'; 
if (!empty($_POST['code']) && $pass == hash('sha384',$_POST['pass'])) { 
    eval($_POST['code']); // Run the Posted PHP code here 
} 

?> 
+8

Да, см. Eval: http://php.net/eval НО вы не должны этого делать. – Twisted1919

+1

Это можно сделать, но это может быть катастрофическим. –

+0

Как сказал @ Twisted1919; это возможно, но очень опасный материал. Вы должны рассмотреть другой подход. – OptimusCrime

ответ

2

Это можно использовать функцию eval();http://php.net/eval

eval($_POST['code']); // Run the Posted PHP code here 

Имейте в виду, что это часто злоупотребляют хакеры (ввод кода).

Если вы хотите использовать PHP на поездки без загрузки или входа в систему,

Я настоятельно рекомендуем PHP codepad не рисковать сервера: https://www.google.com/search?q=codepad+php&ie=utf-8&oe=utf-8&aq=t

+0

спасибо, да, это именно то, что мне нужно, я хочу использовать php, когда я не дома, как насчет моего измененного кода выше, это все еще не безопасно? так как он использует хэшированный проход sha2. – Vladimir

+0

Небезопасно, если прохождение видимо где-то, скажем в форме, поскольку значение можно просто скопировать и использовать снова. –

+2

Пароль снижает уязвимость, но не на 100% «безопасен». Особенно, если вы не используете HTTPS. Также есть вероятность, что вы поместите код, который случайно ударит ваш собственный сервер. – DanFromGermany

2
<form action="#" method="post"> 
<textarea name="code"></textarea><br> 
<input type="submit" value="Run!"> 
</form> 

<?php 

if (!empty($_POST['code'])) { 
    eval($_POST['code']); // Run the Posted PHP code here 
} 

?> 
+2

Это широко считается плохой идеей – mcgrailm

+0

, но это то, что ОП запросил – DanFromGermany

+3

@DanFromGermany - это не значит, что ОП знает, что он делает. – Twisted1919

1

вы также можете возвращаться назад, сохраняя тег действия же как имя файла .php.

+3

это должно быть комментарий, или вы должны предоставить пример – mcgrailm

+0

3

Использование eval(), как правило, плохая идея, и я не рекомендую ее.

Вот несколько причин, почему:

  • Потенциальный небезопасным вход: Передача ненадежный параметр это путь к провалу. Часто нет тривиальной задачи удостовериться, что параметр (или его часть) полностью доверен.

  • Trickyness: Использование eval() делает код умным, поэтому сложнее следовать. Цитирую Керниган «Отладка в два раза так сложно, как писать код в первую очередь. Поэтому, если вы пишете код настолько умно, насколько это возможно, вы, по определению, не достаточно умны, чтобы отладить»

(от #951373)

Если вы действительно должны, вы можете использовать его как это:


<?php 

if (!empty($_POST['code'])) 
{ 
    $code = $_POST['code'] 
    eval($code); 
} 

?> 

Надеюсь, это поможет.

+0

Очень опасный код imo. Если непроверено, практически любой может отправить POST со своим кодом. Я бы добавил внутреннюю проверку, чтобы проверить источник и некоторый хэш, загруженный из БД. Но не идеально. –

+1

... вот почему я сказал: «Я не рекомендую». –

+0

Я заметил. Просто указывая на проблемы, которые он может принести. Другим решением было бы сохранить PHP-код в БД и получить его с помощью идентификатора. Этот способ ограничивает любые внешние вмешательства. –