Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess如何只允许在一个目录中执行php?+安全问题_Php_Apache_.htaccess_Security_Mod Rewrite - Fatal编程技术网

.htaccess如何只允许在一个目录中执行php?+安全问题

.htaccess如何只允许在一个目录中执行php?+安全问题,php,apache,.htaccess,security,mod-rewrite,Php,Apache,.htaccess,Security,Mod Rewrite,我是一名初级PHP开发人员。请你为我澄清一些安全问题好吗 假设我使用Apache托管和以下目录结构: example.com/ [550] application/ - php files of the site [440] libs/ - 3rd party libs [770] logs/ - access and error logs [770] www

我是一名初级PHP开发人员。请你为我澄清一些安全问题好吗

假设我使用Apache托管和以下目录结构:

example.com/
    [550] application/              - php files of the site
    [440] libs/                     - 3rd party libs
    [770] logs/                     - access and error logs
    [770] www/                      - web root
        [444] .htaccess
        [440] entry_points/         - entry points for all "end"s of the site
            [440] frontend.php
            [440] cabinet.php
            [440] manager.php
        [444] themes/               - ui themes
            [444] {theme}/
                [444] css/
                [444] js/
                [444] img/
        [774] files/                - files like images, pdfs and so on
问题:

这些访问权限适用于文件和目录吗?我不完全理解Linux权限系统在web服务器上下文中的含义

是否有一些方法可以对web用户隐藏输入脚本?我已经尝试将入口点目录向上移动一个级别,使其脱离web访问。但是mod_rewrite在这种情况下会产生一个错误

主题目录只能包含css、js、jpg和png文件。文件目录只能包含一些常规文件类型,如jpg、png、pdf、xls等。entry_points目录是唯一可以合法包含预定义的安全可执行php脚本集的web访问目录。所有这些脚本都由mod_rewrite使用。因此,直接访问它们是不必要的。那么,我怎样才能只在entry_points目录中允许在公共区域执行任何php代码呢

使用一个条目脚本(如index.php)在脚本内部或单独的脚本中进行额外的正则表达式检查,并使用mod_rewrite在它们之间进行选择,这样更好吗

根据文件和目录的结构,你有什么建议吗

有没有其他提高网站安全性的建议?我知道我可以用谷歌搜索关于安全的信息。但假设我是这个话题的新手,恐怕我会意外地发现反模式之类的东西。对不起,我的英语,我找不到更合适的词了


更新:更具体地说,主要问题是3-在这种情况下,如何只允许在一个目录入口点中执行php?

在www根目录中的.htaccess文件中有以下指令,遵循任何将url重写为入口点中文件的规则。当请求的文件包含不在entry_points子文件夹中的.php时,它将发送禁止状态代码

RewriteCond %{REQUEST_URI} !^entry_points/
RewriteRule \.php - [F,L]
Apache的工作方式是检查文件的任何扩展名,如果定义了扩展名,则执行该文件的处理程序。在正常安装中,只有包含.php扩展名的文件才会调用php解释器。一个名为example.php.old.2011.12.02的文件仍然包含php扩展名以及一系列其他扩展名

然而,你不应该仅仅依靠这一点。您应该确保您的上载脚本不允许人们上载php文件,或强制将文件保存在/files/文件夹之外

要防止人们直接访问entry_points文件夹中的脚本,可以使用mod_rewrite或mod_authz_host。使用mod_rewrite不仅可以阻止访问,还可以重定向用户。当有人试图直接访问入口点中的脚本时,发送禁止状态代码的简单方法是:

RewriteCond %{THE_REQUEST} /entry_points/
RewriteRule ^ - [F,L]

使用%{THE_REQUEST}我们确保外部请求包含该文本。如果我们不这样做,而是使用%{REQUEST_URI},那么当我们重写这样一个脚本时,它也会匹配。这显然不是我们的意图。

请不要发布多问题的问题。问题1:-问题2:-问题3:mod_重写为[F]?-问题4/5:StackOverflow的主题外,主要是基于观点的-问题6:主题外,因为它不关注特定的问题。您好,@Sumurai8。我尽量不一次发布多个问题。主要问题是第三个-如何只允许在一个目录中执行任何PHP代码?其他的问题都是在写这篇文章的过程中产生的。另外,我不确定mod_rewrite with[F]是否完全适合限制PHP脚本在除入口点之外的所有其他目录中的执行。如果一个邪恶的家伙会以某种方式在web根目录中创建一个新目录呢?据我所知,这个技巧依赖于文件扩展名.php或类似的东西。据我所知,有一些可能将有害代码注入HTML文件、图像等。