为什么include(‘php:// input’)不起作用?

前端之家收集整理的这篇文章主要介绍了为什么include(‘php:// input’)不起作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下,玩具 PHP应用程序容易受到绝对本地文件包含的影响,例如
<?PHP include($_GET['action']);

我尝试了以下请求来利用它:

POST /?action=PHP://input HTTP/1.1
Host: XXXXXXXXXXXXXXXXX
Content-Length: 3

foo

这有效地执行include(‘PHP:// input’);请求body foo,所以我希望它打印foo.但是,我收到以下错误

<br />
<b>Warning</b>:  include(PHP://input): Failed to open stream: operation Failed in <b>XXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
<br />
<b>Warning</b>:  include(): Failed opening 'PHP://input' for inclusion (include_path='.:/usr/share/PHP:/usr/share/pear') in <b>XXXXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />

这是什么问题?这是PHP安全功能吗?如果是这样,有人可以指向缓解此问题的PHP代码的负责部分吗?

我在 Gustek的帮助下找到了答案.显然PHP://输入属于allow_url_include的重写,而例如PHP:// filter不是:

Restricted by allow_url_include: PHP://input,PHP://stdin,PHP://memory and PHP://temp only.

资料来源:Docs for php:// URL handler

猜你在找的PHP相关文章