我目前正在使用PHP,只是一个初学者,但主要是关于PHP的安全问题.我想知道的是"客户端从服务器的PHP文件中看到了什么".
例如,你说有1张包含所有PHP代码的表.您包含该文件,然后调用要使用的功能.客户从表中看到了什么.它只是被调用的函数,只是输出还是别的什么?
我感兴趣的原因是因为我想知道客户是否有可能看到真正被执行的东西.因此,不仅结果而且来自函数本身的内容,例如正在执行的代码.
把一个模糊的故事放在一起.我对您作为服务器客户端的看法感兴趣.
提前致谢!
PS:我很抱歉如果我发布了一个重复的问题.但我找不到与我的问题类似的东西
考虑到PHP是服务器端,不应该从内部工作中向客户端公开任何内容.仅输出(除非您的服务器配置错误且不解析PHP文件).为了解决这个问题,大多数人只会index.php在文档根目录中有一个文件,它include是文件根目录之外的PHP文件(引导程序文件).这种方式即使文件没有被PHP解析,唯一可访问的内容就是文件require __DIR__ . '/../bootstrap.php';.
但是,当您启用错误报告(您应该始终这样做)并且您已启用显示错误时,可能会泄漏信息.
泄漏信息的示例可能如下所示:
致命错误:在/path/to/Template/stream/stream.phtml:20中消息'Eeeeeeeek'的未捕获异常'Exception'堆栈跟踪:#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'); ?>
Run Code Online (Sandbox Code Playgroud)
如果将显示整个堆栈跟踪,则会显示大量信息.
另一个常见的缺陷是通过更改扩展名来重命名PHP文件(用于备份或其他目的).例如重命名index.php为index.php.bak.现在默认情况下,PHP不再解析文件,可以从客户端读取.
还要注意(某些?)webservers向客户端公开一些信息(即webserver类型,有时使用的是版本和php版本).根据Web服务器的不同,可以通过expose_php指令和使用webserver的指令进行更改.对于apache,您可以将以下内容添加到服务器配置中,以防止暴露所使用的Web服务器(ServerTokens Prod和ServerSignature Off).虽然人们通常仍然可以通过使用指纹识别技术获得至少一些这些信息.
我能想到的最后一件事是用户(或可能的攻击者)通过附加以下查询字符串之一来尝试不同的PHP"复活节彩蛋":
?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
?=PHPE9568F35-D428-11d2-A769-00AA001ACF42
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000
?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
Run Code Online (Sandbox Code Playgroud)
但是IIRC在禁用时也是不可能的php_expose.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |