【问题标题】:Securing PHP files保护 PHP 文件
【发布时间】:2010-11-26 23:13:36
【问题描述】:

您好,感谢大家阅读我的问题。

我一直在研究一个 PHP Web 程序,我想知道在将源代码放到实时服务器上之前我应该​​采取什么措施来保护源代码。源不是分发的,而是通过网站访问的(用户登录网站使用它)。

首先我想保护源 php 文件不被发现和下载。我没有使用任何框架,只是 php,所有文件都在主目录中作为 index.php。我四处阅读,似乎 robots.txt 并不是真正有效的隐藏。我遇到了一些人推荐 .htaccess 的帖子,但我经常认为它是用于使用密码保护目录中的文件,因此不确定是否有办法使其 htaccess 适合 Web 应用程序。

其次,我想保护源文件,以防有人可以访问它们(找到并下载它们或可以访问服务器的系统管理员)。我想到了使用 ioncube 之类的源加密。我的主机也有 GnuPG [我不熟悉,与 ioncube 相比有什么想法吗?]

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

【问题讨论】:

  • 这是一个有趣的问题,我自己也一直想知道同样的事情。我的理解(我没有将其发布为答案,因为我真的不确定)是基于扩展名,服务器在发送任何响应之前总是会通过 PHP 传输文件。显然,如果您可以通过 FTP/SSH/SFTP/etc 获得访问权限,那么您就完蛋了。你可以试试代码混淆程序...

标签: php security encryption


【解决方案1】:

只需确保您的网络服务器设置为正确处理.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

这样,即使你的网络服务器配置搞砸了,并开始以纯文本形式提供.php 文件,这也很糟糕,但至少你不会向全世界公布你的数据库详细信息..

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

我不认为加密是不值得信任的系统管理员的解决方案..

【讨论】:

  • 他们可以请求example.com/config.php.inc 并以纯文本形式获取您的数据库登录。 PHP 如何在浏览器中显示纯文本而不回显?
【解决方案2】:

你的第一点是网络服务器安全,你应该寻求关于 serverfault 的帮助。基本上,您将为此使用安全/锁定目录,或通过 Web 服务访问虚拟目录中的文件。

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

【讨论】:

  • 如果有人可以从您的服务器上获取 PHP 文件(无论是否经过混淆),那么您就有一个更大的问题,无法通过使文件难以阅读来解决!
  • 好点。这正是我远离让我自己的 linux 机器为其服务的想法的原因。这是保护代码免受不良系统管理员侵害的好方法,但我必须学习他的工作,否则我可能会通过自己托管代码而将代码置于更大的风险之中。这就是为什么我想到使用 ioncube 进行加密的原因。
【解决方案3】:

您应该采取的第一步是从网站根目录中取出所有不必要的文件,并将它们放在其他地方,只留下从网络调用的文件。

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

 /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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多