那么,发生了什么?
编辑:那是什么意思?如果其他人在他的PC上安装了PHP,会发生什么?
正如Marc B所提到的,如果你在一个没有防火墙的public IP上设置一个网络服务器,互联网上的每个人都可以访问它.这并不是说你处于这种情况 – 你说你在大学网络上,你很可能会发现他们实现某种形式的本地网络,在你的PC和互联网之间有一个NAT层和/或firewall .但是,您仍然可以发现大学网络(或至少您的部分 – 请参阅subnetting和VLANs)中的每个人都能够访问您的Web服务器.
你能做些什么来防止这种情况发生?
这绝不是一个详尽的列表,但这里有一些更常用的控制Web服务器安全性的方法.
将您的Web服务器设置为仅在localhost上侦听(Mark B已经涵盖了这一点,但要澄清):
主Apache配置文件httpd.conf使用名为Listen
的指令来确定在启动时要创建和绑定的侦听套接字.默认值通常是Listen 80,这意味着服务器将在TCP端口80上侦听机器上注册的每个IP地址.这些IP地址将是127.0.0.1,loopback 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
这允许来自每个客户端的所有请求.如您所见,有两个指令 – Order
和Allow
(具有补充指令,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.216和172.32.64.223之间的所有IP地址,并希望能够使用其中任何一个来访问您的服务器.而不是创建8个单独的Allow指令,我们可以将其定义为:使用CIDR速记,我们可以将此子网表示为172.32.64.216/29,我们可以在Allow指令中使用它:
Allow from 172.32.64.216/29
<目录> sections定义了目录及其所有子目录的规则,因此如果将规则应用于/ myDir,相同的规则也将适用于/ myDir / subDir和/ myDir / subDir / subSubDir.但是,您可以在树下面覆盖这些规则 – 因此您可以创建<目录> / myDir / subDir / subSubDir的部分具有不同的规则.您也可以使用.htaccess文件来定义规则,只要您使用AllowOveride
指令启用它们即可.
如您所见,这种控制谁可以访问您的站点的方法配置相对简单,并且可以提供强大而灵活的规则控制.
回答你的问题如果其他人在他的电脑中安装了PHP,会发生什么? – 没有. PHP是一种服务器端脚本语言,不能直接影响任何其他计算机上的任何内容,特别是在控制对远程计算机的访问方面.
脚注#1 06/2012
只是简单地提一下,在Apache 2.4中已经弃用了Order,Allow和Deny指令.此类访问控制现已与标准身份验证过程合并,现在使用mod_authz_host支持的Require ip,Require host和Require local directives提供.
由于向后兼容性,仍然在mod_access_compat中提供对Order,Allow和Deny的支持,但2.4 branch及更高版本的新配置应使用相应的Require结构,旧的配置应在迁移后转换为使用新机制.旧的控制机制将在未来的Apache版本中删除.