保护PHP包括(与htaccess?)

Ano*_*ous 3 php .htaccess protection include

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

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

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

用htaccess在include目录下输入密码可以修复我的问题吗?首先我认为它不会,因为对于无法访问它的用户来说,包含页面会很奇怪.但它似乎有效,这是怎么来的?还有其他更好的选择吗?Web开发人员通常做什么?

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

无论如何,提前谢谢:)

der*_*ert 8

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

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

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

一旦所有权限检查通过,Apache就会查看该文件,并注意到它是一个.php文件.在您的(或您的Web主机)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等访问).