.htaccess如何只允许在一个目录中执行php?+安全问题
我是一名初级PHP开发人员。请你为我澄清一些安全问题好吗 假设我使用Apache托管和以下目录结构:.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
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文件、图像等。