我正在尝试为共享网络服务器上的文件找出正确的安全设置,但我有几个基本问题还没有通过查看找到答案。
如何阻止人们阅读我的 PHP 文件。建议的设置似乎是 644,这允许全世界的人阅读它们。对吗?php 后缀会阻止他们吗?
如果 public_html 中的 PHP 脚本(由客户端执行)正在访问同一服务器上但在 public_html 之上的 html 文件,我可以将其设置为 600,因为该脚本实际上是用户吗?
public_html 上方的任何内容是否从外部隐藏,或者只是权限隐藏?
编辑 客户端指的是调用各种 PHP 脚本的 iPhone 应用程序。文件内容并不是超级私密的 - 但我想尽量减少黑客攻击的风险,因此不希望人们轻易读取脚本和其他文件。
非常感谢,
克里斯
答案1
这实际上取决于人们如何访问脚本。您是否担心具有 SSH 访问权限的人会打开您的 PHP 文件?或者您只是担心他们通过您不希望他们运行的浏览器访问脚本?
如果这是第一个问题,那么您需要与您的主机讨论帐户和组权限。如果这是第二个问题,那么您可以使用 .htaccess 文件来阻止对文件和整个目录的访问。如果您担心基于浏览器的访问者会看到您的代码,那么请不要这样做。Web 服务器不会将代码发送给最终用户。
为什么你要把一个你不想让人阅读的 php 脚本放在公共网站上?你对此有什么顾虑?如果你只希望某些人能够运行脚本,那么你需要添加登录系统和权限系统。
此外,既然一个文件就足够了,为什么还要使用涉及两个文件的方法呢?基于浏览器的访问安全性不会来自文件权限。它将来自登录和用户权限。
您的 Web 服务器不会提供任何来自未设置为允许访问的目录的内容。换句话说,如果您的帐户有一个 public_html 文件夹和一个 subdomains 文件夹,并且这两个文件夹都配置为您的网站提供网站和数据,那么这些就是它的唯一来源。基于 Web 的访问实际上非常简单。您不是在访问文件系统。您访问的是 Apache 设置为向您提供的内容。您的帐户目录可以有其他文件夹,其中包含您想要的任何内容,但这些内容不会在 Web 上可见。只需创建目录,不要将 Apache 指向它。
答案2
如果您所说的“客户端”是指浏览器或其他可以发送 HTTP 请求的东西,那么通常无需担心。Apache 会在提供文件之前尝试执行该文件,这意味着如果您直接向它发出请求,您很可能会得到 goblety-gook。当然,如果可以的话,将应用程序的基本文件放在其他地方public_html/
并通过相对路径包含它们通常是一个好主意。如果您使用的是框架而不是一些自制的东西,这会容易得多,但如果没有框架支持,这仍然是可能的。
另一方面,如果你所说的客户端是指“你的公司托管着别人的东西”,那么你指的是服务器的东西。运行 PHP 文件的“用户”通常是 Apache(HTTPD,取决于你的服务器配置)。虽然我相信可以让不同的脚本对同一个 Apache 服务器拥有不同的权限,但你最好在chroot jail
答案3
如果您的 PHP 文件必须可由 Web 服务器进程读取,那么它们也将可由在机器上拥有网站的任何其他人读取。这是大多数 Web 主机设置其机器的方式。
如果资产保护至关重要,那么就选择专用的。另一种方法是让您的网络托管商实施某种用户切换模式,例如苏普。只有这样,您才能将 php 文件设置为 600 并且仍能使它们正常工作。
底线是,向您的主机询问可用的选项。
答案4
在正确配置的 Web 服务器上,DocumentRoot 以上的所有内容都对外界隐藏,并且该行为由 Web 服务器本身处理,而不是文件系统权限系统。