草庐IT

php - 如果我下载了 PHP/MySQL,其他人可以访问我的文件吗?

coder 2023-06-18 原文

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

那么,发生了什么?

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

最佳答案

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

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

你能做些什么来防止这种情况?

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

将您的 Web 服务器设置为仅在 localhost 上监听(Mark B 已经涵盖了这一点,但要澄清一下):

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

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

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

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

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

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

您可能已经知道,为了让 Apache 为目录提供服务,您必须创建一个 <Directory> 部分在 httpd.conf .在默认配置文件中,您将找到一个预先配置为服务的部分 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 - 您的本地机器。现在假设你想允许你的 friend ,他的 IP 地址是 172.32.64.218 , 也可以访问该页面 - 我们添加了 Allow将他的 IP 地址指令添加到上述配置的末尾:
Allow from 172.32.64.218

设置好之后,你的 friend 告诉你他拥有172.32.64.216之间的所有IP地址。和 172.32.64.223 ,并希望能够使用它们中的任何一个来访问您的服务器。而不是单独创建 8 个 Allow指令,我们可以将其定义为一个:使用 CIDR简写,我们可以将此子网表示为 172.32.64.216/29 ,我们可以在 Allow 中使用它指示:
Allow from 172.32.64.216/29
<Directory>部分定义目录及其所有子目录的规则,因此如果您将规则应用于 /myDir ,同样的规则也适用于 /myDir/subDir/myDir/subDir/subSubDir .但是,您可以在树的下方覆盖这些规则 - 因此您可以创建 <Directory>部分为 /myDir/subDir/subSubDir用不同的规则。您也可以使用 .htaccess文件来定义规则,只要您使用 AllowOveride 启用它们指示。

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

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

脚注 #1 06/2012

只是一个简短的说明,提到Order , AllowDeny指令已在 Apache 2.4 中弃用。这种类型的访问控制现在已与标准身份验证过程合并,现在使用 Require ip 提供。 , Require hostRequire local mod_authz_host 支持的指令.

支持 Order , AllowDeny仍通过 mod_access_compat 提供为了向后兼容,但 2.4 分支及更高版本的新配置应使用适当的 Require结构和旧配置应在迁移后立即转换为使用新机制。 旧的控制机制将在 Apache 的 future 版本中删除。

提供了一份介绍新指令用法的文档 here .

关于php - 如果我下载了 PHP/MySQL,其他人可以访问我的文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757274/

有关php - 如果我下载了 PHP/MySQL,其他人可以访问我的文件吗?的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  4. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  5. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  6. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  9. ruby - 调用其他方法的 TDD 方法的正确方法 - 2

    我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent

  10. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

随机推荐