php - 保护 php 包括(使用 htaccess?)

标签 php .htaccess include protection

首先,我很确定 Stack Overflow 上也会有类似的问题,但我并没有真正找到它。可能是因为我使用了错误的关键字。所以不要因此而开枪。

我的问题基本上是,我想包含 php 文件,但我只希望包含它们,而不是让人们用他们的浏览器打开。他们应该得到一个错误。

例如,我有一个包含目录的 php 文件,其中包含我与数据库的连接(密码等。危险?)。我希望能够包含它,但我不希望人们直接访问该页面。

使用 htaccess 在 includes 目录中设置密码可以解决我的问题吗?首先我认为它不会,因为对于没有访问权限的用户可以包含页面会很奇怪。但是好像可以用,这是怎么来的?还有其他更好的选择吗? Web 开发人员通常做什么?

我也可以对 javascript 文件做类似的事情吗?我的猜测是情况并非如此,但我只是问问。 js 文件包含对某些页面的 ajax 调用,但我想如果我能保护 php 页面不被访问我会很高兴。

无论如何提前感谢:)

最佳答案

我认为解释这些部分如何协同工作将有助于消除混淆。

请求进入(来自用户的网络浏览器)。您的 Web 服务器(在本例中为 Apache)接收此信息。首先,它检查 <Location>权限。然后它查看其余的配置,并最终将请求 URI 映射到文件系统。现在,它终于可以检查 <Directory> 了。权限以及 .htaccess .

如果任何这些权限检查失败(例如,deny from all),Apache 将停止处理该请求,并发回一个错误(或在 HTTP 基本身份验证的情况下请求用户名和密码)。

一旦所有权限检查通过,Apache 就会查看该文件,并注意到它是一个 .php文件。在您(或您的网络主机)的 Apache 配置中的某处,有一个 AddHandler。指示 Apache 将此请求传递给 PHP 引擎(可以是 mod_php,或通过快速 cgi)的指令。 (对于大多数文件,它会将文件的内容发送到浏览器。但是脚本文件是特殊的,因为 AddHandler 。)

现在,PHP 读取您的脚本文件。然后它还会直接读取您的包含文件。这不会通过 Apache 返回,所以像 .htaccess 这样的东西请勿应用。这也意味着您的 PHP 包含不需要位于您的文档根目录中。它们可以位于 PHP 进程可以访问的任何位置(基于 UNIX 权限和 PHP 配置)。在 php.ini 中设置 include_dir 可以轻松地将它们放在任何地方。

客户端 JavaScript 由用户的浏览器运行。它不是在服务器端解释的(就像 PHP 那样)。因此用户必须能够访问它,就像用户必须能够访问您的 .html 文件一样。

所以,简而言之:

  • 你可以输入 .htaccessDeny from all在您的 PHP 包含目录中。 PHP 的 include指令不通过 Apache,所以它不会关心。理想情况下,您甚至根本不要将 PHP 包含目录放在文档根目录下。
  • 您不能为 JavaScript 执行此操作,因为 JavaScript 访问通过 Apache(就像 .html、.png 等访问一样)。

关于php - 保护 php 包括(使用 htaccess?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923431/

相关文章:

html - 在 html 文件中包含 html 文件

php - adsense服务器端

javascript - 如何使用 AJAX 将八位字节/流类型的 Blob 发送到服务器?

php - .htaccess 资源被解释为脚本但以 MIME 类型 text/html 传输

javascript 或 htaccess 重写 url

c++ - 重载三元? : operator, 或更改为包含文件中的 if{}else{}

php - MySQL多关键字搜索算法

php - 如何使用 Fabrik(joomla 组件)表单连接到数据库表并搜索匹配并返回结果?

apache - 内容安全策略无效字符

javascript - 包含文件上的 jquery .html