【发布时间】:2018-09-09 23:27:27
【问题描述】:
PHP 的magic constants 允许您访问诸如当前正在执行的PHP 文件、当前函数的名称等信息。
虽然这些数据不是直接用户输入的,但它肯定会受到用户输入的影响(例如:通过访问特定路径来影响__dir__和__file__等),但是在大多数情况下,远程用户输入不可能准确地影响这些变量。
例如,如果您要访问 example.com/<script>window.alert("XSS");</script>,这不会导致该服务器上的 __file__ 变量包含恶意 JavaScript。相反,它将包含您的 404 ErrorDocument 的路径(假设 XSS 示例不是您服务器上的实际路径)。
恶意数据还有哪些其他方式可以进入这些变量?
我是否遗漏了与 PHP 魔术常量相关的其他安全注意事项?
就上下文而言,这是关于服务于静态 PHP 页面的 Apache 服务器,站点上没有额外的用户输入(例如:表单、文件上传、cookie 等)。
【问题讨论】:
-
不受用户输入影响,但
__FILE__/__DIR__解析符号链接,因此可能会泄露有关服务器文件系统的信息。 -
那么这些和
$_SERVER['PHP_SELF']这样容易受用户输入影响的东西完全不同? -
不,在这方面更像
$_SERVER['SCRIPT_FILENAME']。 -
所以你是说
$_SERVER['SCRIPT_FILENAME']很容易受到用户输入的影响? -
不,我是说
__FILE__和$_SERVER['SCRIPT_FILENAME']一样,但它们确实解析了文件的绝对路径,这可能会显示有关服务器文件夹结构的信息。跨度>
标签: php security magic-constants