如何保护我的服务器上的php文件不被请求

时间:2016-11-19 19:37:59

标签: php apache .htaccess

我对php和web都很陌生,现在我正在学习关于php的oop以及如何将我的程序分成每个.php文件中的类。之前所有我都知道php程序,我可能将这些文件放到我的根文件夹中

  1. home.php
  2. about.php
  3. products.php
  4. contact.php
  5. 因此,每当客户端在浏览器中请求任何内容时

     http://www.example.com/resources/myFunctions.php
    

    没问题,文件会将正确的页面输出到客户端。

    现在,我有一个问题。我在根文件夹中也有这样的文件

    1. class1.php
    2. class2.php
    3. 资源/ myFunctions.php
    4. 资源/ otherFunctions.php
    5. 如何通过在浏览器中输入类似内容来阻止用户请求这些文件?

      exit;

      我一直在考虑的方法是在每个文件的顶部添加此行{{1}}

      或者,我知道有一个名为.htaccess的东西,它是一个影响Apache工作方式的Apache配置文件。

      现实生活应用程序如何解决此问题?

2 个答案:

答案 0 :(得分:2)

您确实可以使用任何可用的服务器端配置选项。

根据托管的设置方式,您可以修改PHP的包含路径(http://php.net/manual/en/ini.core.php#ini.include-path),也可以将各种文档/目录限制为特定的主机/子网/ Apache站点配置中的无访问权限{{{ 3}})。

如果您使用的是共享主机,那么这种级别的锁定通常是不可能的,因此您仍然坚持使用Apache重写规则,结合使用易于处理的文件命名约定(即classFoo.inc) .php和classBar.inc.php),。htaccess文件并使用FilesMatch指令阻止访问* .inc.php - https://httpd.apache.org/docs/2.4/howto/access.html

FWIW所有其他方面都相同,Apache基金会表示在服务器端配置中使用.htaccess更好/更有效。如果您可以使用该选项。

答案 1 :(得分:1)

实际应用程序通常在项目的根目录中使用所谓的public/webroot/文件夹,其中所有要通过Web请求的文件都驻留在该文件夹中。

.htaccess文件然后将所有HTTP请求转发到此文件夹,内部URL重写如下:

RewriteRule    ^$    webroot/  [L] # match either nothing (www.mydomain.com)
RewriteRule    ^(.*)$ webroot/$1 [L] # or anything else (www.mydomain.com/home.php)

.htaccess使用正则表达式来匹配请求URI(主机名后面的URL中的所有内容),并在此示例中以webroot/为前缀。

www.mydomain.com/home.php变为www.mydomain.com/webroot/home.phpwww.mydomain.com/folder/file.php变为www.mydomain.com/webroot/folder/file.php

注意:这在浏览器的网址中不可见。

如果配置正确,常规HTTP请求将无法访问位于此文件夹之外的所有文件。然而,您的应用程序(您的PHP脚本)仍然可以访问这些私有文件,因为PHP在您的服务器上运行,因此它具有对这些文件的文件系统访问权。