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

sov*_*ova 8 php apache source-code-protection

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

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

如果这可以发生,有一些什么预防措施,我可以采取什么措施确保我的商业代码保持闭源?

再说一次,这可能不是一个真正的问题,但我很想知道.

tim*_*dev 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.
Run Code Online (Sandbox Code Playgroud)

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

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

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


Mat*_*hew 6

有两种方法可以实现:

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

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

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

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

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