【问题标题】:Can others access my files if I downloaded PHP / MySQL?如果我下载了 PHP / MySQL,其他人可以访问我的文件吗?
【发布时间】:2011-10-13 16:27:51
【问题描述】:

我有大学互联网。它有 IP,比如说 220.81.184.12。我有一个名为 MyProject 的项目(它是文件夹)。当我尝试输入 220.81.184.12/MyProject 时,它会启动我的网站。这意味着,大学里的每个人都可以访问我的文件夹和网站?我使用 Ubuntu 并安装了 PHP 和 MySQL。我也可以通过 220.81.184.12/phpmyadmin 这样的 IP 访问 phpmyadmin。

那么,发生了什么?

编辑:这是什么意思?如果其他人在他的电脑上安装了 PHP,会发生什么?

【问题讨论】:

    标签: php mysql linux


    【解决方案1】:

    这里要介绍的内容很多,所以让我们深入了解...

    正如 Marc B 所提到的,如果您在未防火墙的public IP 上设置 Web 服务器,互联网上的每个人都可以访问它。这并不是说你处于这种情况——你说你在大学网络上,你很可能会发现他们实现了某种形式的本地网络,在你的电脑和互联网。但是,您可能仍然会发现大学网络中的每个人(或至少您的网段 - 请参阅 subnettingVLANs)都可以访问您的网络服务器。


    您能做些什么来防止这种情况发生?

    这绝不是一个详尽的列表,但这里有一些更常用的控制 Web 服务器安全性的方法。

    将您的 Web 服务器设置为仅在 localhost 上侦听(Mark B 已经对此进行了介绍,但需要澄清一下):

    主 Apache 配置文件 httpd.conf 使用名为 Listen 的指令来确定在启动时创建和绑定到哪些侦听套接字。默认值通常为Listen 80,这意味着服务器将在机器上注册的每个IP 地址上的TCP 端口80 上进行侦听。这些 IP 地址将是 127.0.0.1loopback address,以及与您已安装的任何网络接口关联的任何 IP 地址,例如上面的 220.81.184.12 示例。

    您可以修改此指令以使其更具限制性。例如,如果您只想接受来自本地计算机的连接,您可以将其更改为Listen 127.0.0.1 80。通过这样做,您将能够从本地计算机访问您的 Web 服务器,地址为 http://127.0.0.1/http://localhost/ http://220.81.184.12/ - 是的,您仍然可以使用与该计算机关联的任何地址,因为回送的工作方式 - 但世界上任何地方都没有其他机器能够使用任何地址直接访问它。

    配置防火墙以阻止来自其他机器的连接:

    默认情况下,几乎所有防火墙都会阻止每个传入请求,并且您必须明确允许打开的端口和/或应用程序接受传入连接。如果您不希望其他机器能够访问您的服务器,请不要打开允许该应用程序的端口。许多防火墙允许您对这些规则更有选择性,允许来自某些 IP 地址但不允许来自其他 IP 地址的传入请求。

    如果您想阻止其他人访问您计算机托管的网络资源,防火墙通常是一个不错的起点。 You should find that your Ubuntu installation comes with iptables included.

    限制可以访问 Apache 配置文件中目录的远程客户端:
    请注意:此信息描述了 Apache 指令的使用,这些指令是现在已弃用。请参阅脚注 #1

    您可能已经知道,为了让 Apache 为目录提供服务,您必须在 httpd.conf 中为其创建一个 <Directory> 部分。在默认配置文件中,您会发现一个预先配置为服务DocumentRoot 的部分,其中包含一些如下所示的行:

    Order allow,deny
    Allow from all
    

    这允许来自每个客户端的所有请求。如您所见,那里有两个指令 - OrderAllow(有一个互补指令 Deny)。如果要管理 Apache 服务器,了解这些指令的作用以及它们的工作方式至关重要。链接的手册页中对它们进行了详细说明,因此我不会在此处详细介绍 - 让我们举个例子:

    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    

    将默认值更改为此会导致每个请求都被拒绝,除非它来自 127.0.0.1 - 您的本地计算机。现在假设您想允许您的 IP 地址为 172.32.64.218 的朋友也访问该页面 - 我们在上述配置的末尾添加一个用于他的 IP 地址的 Allow 指令:

    Allow from 172.32.64.218
    

    设置完成后,您的朋友告诉您他拥有172.32.64.216172.32.64.223 之间的所有 IP 地址,并希望能够使用其中任何一个来访问您的服务器。我们可以将其定义为一个,而不是创建 8 个单独的 Allow 指令:使用 CIDR 简写,我们可以将此子网表示为 172.32.64.216/29,我们可以在 Allow 指令中使用它:

    Allow from 172.32.64.216/29
    

    <Directory> 部分定义目录及其所有子目录的规则,因此如果您将规则应用于/myDir,同样的规则也将应用于/myDir/subDir/myDir/subDir/subSubDir。但是,您可以在树的下方覆盖这些规则 - 因此您可以使用不同的规则为 /myDir/subDir/subSubDir 创建一个 <Directory> 部分。您也可以使用.htaccess 文件来定义规则,只要您使用AllowOveride 指令启用它们即可。

    如您所见,这种控制谁可以访问您的站点的方法配置起来相对简单,并且可以提供强大而灵活的规则控制。


    回答您的问题If other person installed PHP in his PC, what would happen? - 没有。 PHP 是一种服务器端脚本语言,不能直接影响任何其他计算机上的任何内容,尤其是在控制对远程计算机的访问方面。


    脚注 #1 06/2012

    简单说明一下 OrderAllowDeny 指令在 Apache 2.4 中已被弃用。这种类型的访问控制现已与标准身份验证过程合并,现在使用mod_authz_host 支持的Require ipRequire hostRequire local 指令提供。

    OrderAllowDeny 仍通过 mod_access_compat 提供支持以实现向后兼容性,但 2.4 分支及更高版本的新配置应使用适当的 Require 结构,旧配置应转换迁移后立即使用新机制。 旧的控制机制在 Apache 的未来版本中被移除。

    here 提供了介绍新指令用法的文档。

    【讨论】:

      【解决方案2】:

      您已经在公共 IP 上放置了一个网络服务器...它将可以从世界任何地方访问。如果您想保持服务器私有,您必须将 Apache 配置为 侦听公共 IP 端口并将其设置为仅响应 127.0.01。这是通过 httpd.conf 中的 Listen 指令完成的。

      另一种选择是使用防火墙来阻止除授权 IP 之外的任何东西对 Apache 端口的访问。

      【讨论】:

      • 更改了 httpd.conf 文件,没有任何改变。
      • 确保其他地方没有其他 Listen 指令。许多 Apache 安装都有多个 .conf 文件用于各种不同的内容,其中一个在 httpd.conf 之后加载,可能会覆盖您的更改。而且你确实需要在每次 .conf 更改后重新启动 Apache。
      • 我重新启动了。好的,将去更改所有 .conf 文件。
      • @hey:我无法访问http://220.81.184.12/MyProject。如果您自己测试,则需要测试两次:一次来自您自己的计算机,应该可以工作,一次来自外网的计算机,应该无法访问。
      【解决方案3】:

      我建议使用 HTTP Auth 来保护您不想共享的目录。这样,如果您确实想要共享其中一个,您只需与您想要授予访问权限的人共享登录详细信息。

      PHP 在服务器本身上运行。它只是一种生成 HTML 的方式,而不是像 Javascript 这样的脚本语言,它是用户浏览器的一部分。

      【讨论】:

        猜你喜欢
        • 2019-02-11
        • 2011-07-23
        • 2020-07-17
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多