为了让PHP运行,我必须在Apache webserver上启用Includes。没有人能真正看到我的.php文件,因为当它们被服务器提取时,它们被渲染,而客户端只能看到css / html /等等。它可能只是用PHP突出我的新意。
有人可以打破我服务器的PHP呈现部分,以便客户端在请求页面时能够看到我的.php代码吗?
如果可以发生,我可以采取哪些预防措施来确保我的商业代码保持封闭源?
同样,这可能不是真正的问题,但我很想知道。
答案 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)
有两种方法可以实现:
为了防止任何这些情况导致问题:
请勿将任何敏感信息(例如密码)嵌入到源文件中。而是将它们包含在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显示的服务器。