3

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

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

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

把一个模糊的故事放在一起。我感兴趣的是您作为客户端对服务器的了解程度。

提前致谢!

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

4

2 回答 2

5

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

但是,当您启用错误报告(您应该始终这样做)并且您启用了显示错误时,可能会泄漏信息。

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

致命错误:/path/to/Template/stream/stream.phtml:20 中未捕获的异常 'Exception' 和消息 'Eeeeeeeeek' 堆栈跟踪:#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...')

ETC

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

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

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

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

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

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

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

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

于 2013-06-16T14:16:36.570 回答
1

在正常情况下,客户端无法查看 php 代码。您可以通过右键单击网页和“检查元素”在例如 chrome 中进行测试。客户端可以看到您可以使用 php-code 设置的 cookie。为了确保它不会被用于错误的目的,您可以使用散列函数来加密您使用 cookie 设置的信息。

例子:

$pass = hash("ripemd160",$pass);
setcookie('password',"$pass",time()+3600);

希望它有所帮助!

PS:散列函数并不是真正可靠的,因为也有办法解密它们。尽管这不是保护密码的好方法(正如 PeeHaa 所说),但对于电子邮件地址来说,这将是相当可观的。

于 2013-06-16T14:21:49.097 回答