0

我找不到以下请求失败的原因
我的 php 代码是:

if (isset($_COOKIE["user"])) {
   echo '<p><h3><strong>Welcome '.$_COOKIE["param"].'</strong></h3></p>'; .....

当我作为参数请求时exec('ls -al'),php 代码没有运行该命令。

在请求的响应中,它就像参数化:

Welcome exec('ls -al')

这次执行失败的原因可能是什么?

4

2 回答 2

2

$_COOKIE["param"]是一个字符串。你在呼应它。它应该运行任何东西。

如果您想在 PHP 中运行命令,则必须使用eval(). 但是对于从 cookie 值运行命令:

不要这样做!

于 2013-01-22T22:30:39.213 回答
0

所以你说 is 的值$_COOKIE['param']exec('ls -al')并且你期望它在你结束时运行echo

这不是它的工作原理。该 cookie 的值将是字符串值“exec('ls -al')”,而不是执行代码的结果。如果你想一想,你就会明白为什么让 cookie 能够自动执行代码是个坏主意。

exec()无论如何运行随机命令并不是一个好主意,特别是如果该输入来自用户(哪些 cookie 可以 - 用户可以并且将更改它们以尝试攻击您)。

相反,您应该使用其他输入,您的代码可以将其解释为运行某些代码的信号。例如,您可以让param值保存字符串list files,您的代码会看到该值并exec('ls -al')为您运行。

但是,您仍然不应该exec编写代码来执行此操作,因为这样很容易意外运行危险的命令。相反,您应该尽可能多地使用 PHP 的内置函数,并且仅在清理您的输入并且只运行已知值之后。

对于您的情况,PHP 有很多函数可以让您与服务器的文件系统进行交互。使用这些来获取系统上的文件列表。

于 2013-01-22T22:30:17.110 回答