是否可以将html发布的数据作为PHP代码运行?

时间:2013-06-28 12:40:40

标签: php

是否可以通过html表单发布PHP代码,然后将其作为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'; ?>

在我的 textarea 中然后发送表单,它将回显“这是一个测试”出来

在回答后编辑

谢谢你们,我不知道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
}

?>

4 个答案:

答案 0 :(得分:3)

使用eval()通常是一个坏主意,我不推荐它。

以下是一些原因:

  • 潜在的不安全输入:传递不受信任的参数是一种失败的方法。确保参数(或其中的一部分)完全受信任通常不是一项微不足道的任务。

  • 棘手:使用eval()会使代码变得更聪明,因此更难以遵循。引用Brian Kernighan“调试的速度是编写代码的两倍。因此,如果您尽可能巧妙地编写代码,那么根据定义,您可能不够聪明,无法对其进行调试”

(来自#951373

如果你真的应该,你可以像这样使用它:


<?php

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

?>

我希望这会有所帮助。

答案 1 :(得分: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

答案 2 :(得分: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
}

?>

答案 3 :(得分:1)

您还可以通过将动作标记与.php文件的名称保持一致来回溯。