2009-09-09 119 views
3

您好,感谢大家阅读我的问题。保护PHP文件

我一直工作在一个PHP Web程序的一小会儿,想知道我应该采取什么措施把它活的服务器上之前保护源。源不是分发的,它是通过网站访问的(用户登录到网站使用它)。

首先我想保护源php文件被发现和下载。我没有使用任何框架,只是PHP和所有文件都在主目录中作为index.php。我周围阅读,似乎robots.txt是不是真的有效隐藏。我遇到过一些推荐.htaccess的人,但我经常认为它是用密码保护目录中的文件,所以不知道是否有办法让htaccess适用于Web应用程序。

其次,我想有人被访问它们的情况下,保护源文件(发现他们并下载或具有随时访问到服务器的系统管理员)。我想到了像ioncube这样的源码加密。我的主机也有GnuPG [我不熟悉,与ioncube相比有什么想法吗?]

我不熟悉源代码保护,所以任何想法都会很好,当然非常感谢你: )

+0

这是一个有趣的问题,我一直在想同样的事情自己。我的理解(我没有将它作为答案发布,因为我真的不确定)是基于扩展名,服务器将始终通过PHP管理文件,然后再发送任何响应。很明显,如果你可以通过FTP/SSH/SFTP /等获得访问权限,那么你就会受到攻击。你可以尝试一个代码混淆程序... – 2009-09-09 19:56:54

回答

3

一个级别上的所有文件,只要确保你的网络服务器设置为正确处理.php文件,并且所有文件都有正确的.php扩展名(不是.php.inc或类似的)

只要你的服务器执行PHP,没有人可以下载它的源代码(忽略代码中的任何安全漏洞,这是一个不同的主题)

有一段时间,通常会命名沿着mystuff.php.inc的行包含的文件 - 这是一个馊主意。假设您的网站位于“example.com”,并且您将数据库配置存储在config.php.inc - 如果有人猜测此URL,他们可以请求http://example.com/config.php.inc并以纯文本形式登录您的数据库。

这是个好主意将配置和其他库存储在一个目录中作为bisko answered - 因此您有一个目录结构,如..

/var/example.com: 
    include/ 
     config.php 
     helper_blah.php 
    webroot/ 
     index.php 
     view.php 

这样,即使您的Web服务器配置被搞砸了,并开始服务.php文件作为纯文本,它会是坏的,但至少你不会宣布你的数据库的详细信息到世界各地。

至于加密文件,我不认为这是一个好主意..文件必须是未加密到Apache(或任何你使用的服务器)可以访问它们。如果Apache可以访问它,你的系统管理员可以太..

我不认为加密是解决一个不可信赖的系统管理员..

+0

谢谢,并且谢谢 – Chris 2009-09-11 00:45:16

+0

_they可以请求http://example.com/config.php.inc并以纯文本形式获取数据库登录.._ PHP如何在浏览器中显示纯文本而不回显? – 2017-01-04 14:20:47

0

对于你的第一点,那就是web服务器安全性,你应该在serverfault上寻找帮助。基本上你会使用一个安全/锁定的目录,或通过Web服务访问虚拟目录中的文件。

对于第二点,你可以使用obfuscator来保护你的源代码,但要记住,如果他们得到这个文件,你只能做很多事情来保护它。如果他们真的感兴趣,他们会得到他们想要的。

+0

如果有人可以从你的服务器获取PHP文件(混淆或不混淆),你有一个更大的问题,一个难以解读的文件难以解决! – dbr 2009-09-09 20:17:26

+0

好点。这就是为什么我不想让自己的linux系统能够使用它的原因。这是保护系统管理员不受恶意代码攻击的好方法,但是我必须学习他的工作,否则我可能会通过自己托管代码来承担更大的风险。这就是为什么我想到用ioncube加密的想法。 – Chris 2009-09-09 20:38:42

0

你应该采取的第一步是采取了所有必要的文件在网站根目录,并把它们在其他一些地方,只留下文件,从网上被调用。

例如,如果你有这样的设置:

/var/htdocs/mysexydomain.com/root/config.php 
/var/htdocs/mysexydomain.com/root/db.class.php 
/var/htdocs/mysexydomain.com/root/index.php 
/var/htdocs/mysexydomain.com/root/samplepage1.php 

上面搭让你获得

/var/htdocs/mysexydomain.com/includes/config.php 
/var/htdocs/mysexydomain.com/includes/db.class.php #see the includes dir? :) 
/var/htdocs/mysexydomain.com/root/index.php 
/var/htdocs/mysexydomain.com/root/samplepage1.php