如果渲染失败,人们可以看到我的PHP代码吗?

时间:2011-04-11 02:41:57

标签: php apache source-code-protection

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

有人可以打破我服务器的PHP呈现部分,以便客户端在请求页面时能够看到我的.php代码吗?

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

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

6 个答案:

答案 0 :(得分:7)

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

现在,大多数框架(公共或内部)都在网络可访问的区域中保留很少的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(或任何框架,实际上)文件布局,以获得更清晰的图片。

答案 1 :(得分:6)

有两种方法可以实现:

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

    • 请勿将任何敏感信息(例如密码)嵌入到源文件中。而是将它们包含在Web根目录之外的文件中。因此,如果您的来源变得可见,则任何人都无法访问该私人数据。

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

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

答案 2 :(得分:4)

  

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

当Web服务器软件配置错误,不能将.php文件作为PHP处理时,可能。没有用户可触发的方式。

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

我认为这实际上取决于服务器本身的安全性,如果它容易受到攻击,那么你的代码也有可能受到损害。

至于PHP暴露它也在服务器设置上,过去我见过人们问为什么他们看到他们的PHP代码显示在网页上是由于使用短手标签{{1}默认情况下,通常不会启用导致PHP显示的服务器。