PHP 客户端与服务器端

标签 php security

<分区>

我目前正在使用 PHP,只是一个初学者,但主要对有关 PHP 的安全问题感兴趣。我想知道的是“客户端从服务器的 PHP 文件中看到了什么”。

例如,假设您有一张包含所有 PHP 代码的工作表。您包含该文件并调用您要使用的函数。客户从表格中看到了什么。它只是被调用的函数,只是输出还是其他什么?

我之所以感兴趣,是因为我想知道客户是否有可能看到真正执行的是什么。因此,不仅是结果,还有函数本身的内容,例如正在执行的代码。

把一个模糊的故事放在一起。我感兴趣的是,作为客户端,您对服务器有多少看法。

提前致谢!

PS:很抱歉,如果我发布了重复的问题。但是我找不到与我的问题类似的内容

最佳答案

考虑到 PHP 是服务器端的,内部工作不应向客户端公开任何内容。仅输出(除非您的服务器配置错误并且不解析 PHP 文件)。为了应对这个问题,大多数人只会在他们的文档根目录中有一个 index.php 文件,该文件 include 在文档根目录之外的一个 PHP 文件( Bootstrap 文件)。这样,即使文件未被 PHP 解析,唯一可访问的将是带有 require __DIR__ 的文件。 '/../bootstrap.php'; 在里面。

然而,当您启用 error reporting 时,可能会泄露信息。 (您应该始终这样做)并且您已启用display errors .

信息泄露的示例可能如下所示:

Fatal error: Uncaught exception 'Exception' with message 'Eeeeeeeek' in /path/to/Template/stream/stream.phtml:20 Stack trace: #0 /path/to/PitchBlade/src/PitchBlade/Mvc/View/View.php(179): require() #1 /path/to/PitchBlade/src/PitchBlade/Mvc/View/View.php(196): PitchBlade/Mvc/View/View->render('stream/stream.p...')

/path/to/View/Stream/Stream.php(46): PitchBlade/Mvc/View/View->renderPage('stream/stream.p...')

等等

您可以通过在代码深处的某处“伪造”异常来自己找出答案:

<?php throw new \Exception('Eeeeeeeek'); ?>

如果显示整个堆栈跟踪,则会暴露大量信息。

另一个常见的陷阱是通过更改扩展名来重命名 PHP 文件(出于备份或其他目的)。例如。将 index.php 重命名为 index.php.bak。现在默认情况下 PHP 不再解析该文件,它可以从客户端按原样读取。

另请注意,(某些?)网络服务器向客户端公开了一些信息(即网络服务器类型,有时使用的版本和 php 版本)。根据网络服务器的不同,这可以通过 expose_php directive 更改。并根据您使用的网络服务器的指令。对于 apache,您可以将以下内容添加到服务器配置中,以防止暴露所使用的网络服务器(ServerTokens ProdServerSignature Off)。虽然人们通常仍然能够通过使用 fingerprinting technique 至少获得部分信息。 .

我能想到的最后一件事是用户(或可能的攻击者)通过附加以下查询字符串之一来尝试不同的 PHP“复活节彩蛋”:

?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
?=PHPE9568F34-D428-11d2-A769-00AA001ACF42

但是 IIRC 这在禁用 php_expose 时也是不可能的。

关于PHP 客户端与服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17134170/

相关文章:

ios - 如何保护应用程序文档目录中的文件不被外部工具(iFunbox/iTools 等)读取

php - 4 个条目后关闭 div 标签 - mysql 循环

php - 在 php 错误中更新表单行

php - 从动态创建的 html 表中检索数据

spring - 使用Grails和Spring Security向用户添加UserProfile。未设置参数#7

security - "__fortify_fail"是做什么的?

javascript - 动态脚本标签的安全问题

security - 使用 AES-GCM 的协议(protocol)中 nonce/IV 的来源和重要性

javascript - 如何在网站上制作 "Scroll further down"按钮?

php - 上传文件然后将其复制到两个不同的目录?