8

为了让 PHP 运行,我必须在 Apache 网络服务器上启用 Includes。没有人能真正看到我的 .php 文件,因为当它们被服务器获取时,它们会被渲染,而客户端只看到 css/html/whatever。它可能只是突出了我对 PHP 的新鲜感。

是否有人可以破坏我服务器的 PHP 渲染部分,以便客户端在请求页面时能够看到我的 .php 代码?

如果发生这种情况,我可以采取哪些预防措施来确保我的商业代码保持封闭源?

同样,这甚至可能不是一个真正的问题,但我很想知道。

4

6 回答 6

7

正如其他人所说,将 .php 文件视为纯文本的配置错误的 Web 服务器会很乐意为您提供源代码。

然而,如今大多数框架(无论是公共的还是内部的)都在 Web 可访问区域中保留了很少的 php 代码。通常,文档根目录中有一个 index.php 文件,它包含和调用完全位于文档根目录之外的其他文件中的代码。

通常,你会有这样的东西:

/path/to/proj/            <-- your project root
/path/to/proj/application <-- holds most of your appication code
/path/to/proj/lib         <-- third-party libraries go here
/path/to/proj/public      <-- your web server uses this as the document root.
/path/to/proj/public/index.php   <-- single point of entry into your applicaiton.  all requests are routed through here.
/path/to/proj/public/images      <-- static resources, like images, also live under the docroot.

重写规则通常用于通过一个公共 index.php 文件编组任何请求。

使用这样的设置,如果您的网络服务器配置错误,导致它传输您的代码,那么您几乎可以被覆盖。唯一的泄漏是您的 index.php 文件,它可能是几个 include/require 语句和单个函数/方法调用。一点都不敏感。

查看标准的 Zend Framework 或 Symfony(或任何框架,实际上),文件布局,以获得更清晰的画面。

于 2011-04-11T02:57:11.803 回答
6

发生这种情况有两种方法:

  1. 不执行 PHP 文件的配置错误的 Web 服务器。这与用户触发错误无关。
  2. 运行自定义调试功能,在屏幕上显示错误代码。例如,如果您使用第三方框架,它可能会自动执行此操作。用户可能会触发这样的事情。

为了帮助防止任何这些情况导致问题:

  • 不要在源文件中嵌入任何敏感信息(例如密码)。相反,请从位于 Web 根目录之外的文件中包含它们。因此,如果您的来源变得可见,那么没有人将能够访问该私人数据。

  • 不要在生产中的屏幕上显示错误。数据库密码可能会出现在抛出的异常中。

  • 请务必在生产环境中禁用任何开发/调试设置。

于 2011-04-11T02:54:05.617 回答
4

是否有人可以破坏我服务器的 PHP 渲染部分,以便客户端在请求页面时能够看到我的 .php 代码?

只有当 Web 服务器软件被错误配置为不将.php文件作为 PHP处理时,才会发生这种情况。没有用户可触发的方式来实现这一点。

过去在知名网站上发生这种情况的几次都是配置错误和拼写错误,例如未能正确打开<?php标签,从而暴露了该文件中的其余代码。

于 2011-04-11T02:49:07.333 回答
1

不会。正确配置的 PHP 代码不会自行输出,除非您告诉它. (不知道应该执行.php文件的错误配置的服务器可能只会将它们作为纯文本输出。在这种情况下,您会遇到麻烦。)

您只需要在极少数情况下注意这一点——例如,当您获取文件的内容并将其输出给用户时,您可以添加一个检查以确保获取的文件不是您的 PHP 代码。

但在 100 例中的​​ 99 例中,您无需担心这一点。

于 2011-04-11T02:49:59.993 回答
1

这不是一个真正的正常问题,但编写/使用不安全的 PHP(和其他软件)可能会留下漏洞。对于 PHP,使用防御性编程(例如包含任何用户提供的输入的转义 SQL 查询)非常重要。去除特殊字符(htmlentities() 有帮助,但还不够),并在允许人们输入直接影响您的代码和数据库的内容时保持安全意识。

于 2011-04-11T02:51:07.800 回答
1

我想说这真的取决于服务器本身的安全性,如果它变得容易受到攻击,那么您的代码也有可能受到损害。

至于暴露的 PHP,它也在服务器设置中,过去我看到有人问他们为什么看到他们的 PHP 代码显示在网页上,这是由于使用<?默认情况下通常不启用的简写标签引起的到导致 PHP 显示的服务器。

于 2011-04-11T02:51:29.960 回答