子目录中的.htaccess文件

在计算机的文件系统中,每个文件和目录各自都配有许可权限,这些权限规定了哪些文件是可读的,哪些是可写入的,哪些是可执行的。

许可权限系统是一种保护用户网站安全性的基本措施。默认WordPress安装目录中,每个文件和文件夹(如目录)都带有相应的许可权限设置,它利用服务器中已有的许可限制设置来决定尚未设定权限的设置,非常安全。

尽管如此,有时却只能在安全和方便中二者择其一:有些WordPress插件为了保证读写文件时的方便,对目录的安全设置会相对宽松。

示例

WordPress中有些插件能够上传、编辑并管理图片文件。在插件的选项栏中进行设置后,这些插件就可以读取并写入基本图像目录。为保证目录在各个服务器中都能正常运行,运行php/服务器的程序要具备基本图像目录的写入权限(权限777)。尽管如此,目录权限为777意味着某种安全漏洞:恶意访问者可以上传脚本到目录中并攻击网站。

从安全角度考虑,具有自由写入权限的目录也应采取保护措施,哪怕只是很小的保护措施。开始时可以设定744等较高的权限,然后逐步将权限降到合适的等级。尽量只在必要时暂时使用777权限。

suEXEC是什么?

通过suEXEC功能,Apache用户可以在自己的用户ID(不同于调用web服务器的用户ID)下运行CGI和SSI程序。正常情况下执行CGI或SSI程序的用户ID即调用web服务器的用户ID。

如果使用得当,suEXEC能够极大地降低用户开发运行个人CGI和SSI所带来的安全风险。但如果配置不当,suEXEC不仅可能带来很多问题,甚至可能生成新的计算机安全漏洞。对那些不了解管理用户标识符程序以及相应的安全问题的用户,我们不推荐使用suEXEC。

问题

如何在保护WordPress安装目录的同时享受WordPress插件所带来的附加功能?

用.htaccess文件保护个人目录

用.htaccess文件可以解决上面提出的问题。你可以在任何许可权限较为宽松(如760,766,775以及777)的目录中添加.htaccess文件,也可以阻止某个目录和它所有子目录中的脚本执行,还可以禁止某一类型文件外的其它所有文件的写入。

保护特定文件类型

以下代码段可禁止在目录中使用.jpeg, .jpg, .png. 以及 .gif文件外所有文件:

order deny,allow

deny from all

下面这个代码示例用指令来指定能够被访问的文件类型。将“Allow”改为“Deny”可以拒绝所有访问。

Allow from All

禁止脚本执行

浏览器发送请求时,使用以下代码可以禁止执行.pl, .cgi 或者 .php等可执行脚本。通过以下代码,Web浏览器将这些可执行文件当作文本文件来处理。这些文件会在浏览器窗口中以普通文本形式显示出来。

AddType text/plain .pl .cgi .php

Options -ExecCGI指令是.htaccess文件中一个作用较广泛的指令。该指令决定.htaccess文件中哪些内容是其它Apache模块所允许的。-ExecCGI规定,如果文件被记录由 cgi-script处理器进行处理,该文件将不允许出现。 第二行中的AddHandler指令列举了cig-scripts的所有文件扩展名,所有尝试获取这些文件的请求都会被返回403错误——访问被拒绝。

Options -ExecCGI

AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi

最后你还可以使用一个指令来命令文件类型(非处理器)。该指令删除所有与扩展名相关的处理器和动作,然后以文本/普通形式使用文件,但该指令不会改写之前的示例范围。

ForceType text/plain

远程控制vs本地请求

什么时候使用REDIRECT_STATUS环境变量

在下面的代码中,我们利用AddHandler和 Action指令来为Apache设置REDIRECT_STATUS环境变量。这样做的原因是,.php文件请求被发送时,Apache不仅要处理该文件,还要将文件转换为/cgi-bin/php.cgi脚本。执行转换操作的可以是一个真正的php-cgi解析器,也可以仅仅是一个可执行php解析器的shell脚本。

AddHandler php-cgi .php

Action php-cgi /cgi-bin/php.cgi

下面的代码建立了一个环境变量PHPRC,然后执行php.cgi文件。

#!/bin/sh

export PHP_FCGI_CHILDREN=3

export PHPRC=/home/custom-ini

exec /home/bin/php.cgi

下面的代码所执行的php解析器(如果解析器存在)位于执行脚本的当前路径中:

#!/bin/sh

exec php

你可以用它来锁定htaccess目录和文件,甚至可以锁定带有REDIRECT_STATUS环境变量的请求。这是因为REDIRECT_cgi环境变量只赋值给本地请求。注意,请求/cgi-bin/php.cgi 文件的是Apache,因此请求才会被定义为本地请求。如果访问的页面以.php结尾,REDIRECT_变量将在apache把它的控制权转交给/cgi-bin/php.cgi文件时赋值给给apache。因此,如果/cgi-bin/php.cgi文件不具有REDIRECT_STATUS变量赋值,你可以锁定所有对/cgi-bin/php.cgi文件的请求。

REDIRECT_STATUS

REDIRECT_STATUS变量起源于内部请求,该变量最初(REDIRECT_STATUS变量的历史甚至早于php)被用于处理ErrorDocument(错误文件)。ErrorDocument一般由用户行为触发,例如,用户请求的页面不存在会导致404错误页面,但之后将用户的请求重定向到ErrorDocument的则是Apache,这类似于为.php文件重定向。ErrorDocument的这一特征使它能够从导致错误的请求中意识到环境设置和环境变量的存在。REDIRECT_STATUS只是REDIRECT_众多变量中的一个,几乎所有传递到重定向脚本的安全变量都以REDIRECT_为前缀。

采用访问控制

现在我们只需要具有REDIRECT_STATUS环境变量赋值的请求,那么我们就可以将其它请求定向到403禁止访问页面。要达到这一效果,请把下列代码添加到/cgi-bin/.htaccess文件中:

Order Deny,Allow

Deny from All

Allow from env=REDIRECT_STATUS

联合访问与FilesMatch

以下代码可进入/.htaccess文件并将不可变的正则表达式应用于php[0-9].(ini|cgi)

Order Deny,Allow

Deny from All

Allow from env=REDIRECT_STATUS

拒绝非200的REDIRECT_STATUS

我们也可以用mod_rewrite进一步限制访问,只要用200状态码进行重定向就可以了。如果默认ErrorDocument的php脚本是其本身,重定向就完成了。类似于

ErrorDocument 403 /error.php

这样的代码,其REDIRECT_STATUS为403。

用mod_rewrite拒绝请求

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} !=200

RewriteRule /cgi-bin/path/to/php - [F]

参见

php的.htaccess文件目录,子目录中的.htaccess文件相关推荐

  1. 解决VS2010子目录中的.cpp文件引用上一级目录的stdafx.h找不到定义的问题

    Source目录 |-- stdafx.h |--Util目录 |--Util.h |--Util.cpp 现在的发现Util.cpp各种变量的定义全是红色波浪线,找不到定义,但是却能够编译过 问题就 ...

  2. 使用Shell遍历目录及其子目录中的所有文件方法

    #! /bin/bashfunction read_dir(){for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令doif [ -d $1"/"$f ...

  3. python获取ftp服务器文件列表_使用Python列出FTP中所有子目录中的所有文件

    我知道这有点过时了,但这里的答案可以帮我省去一点力气,所以就在这里.我有点业余,所以这可能不是最有效的方法,但这里有一个程序,我写了一个程序来获取FTP服务器上的所有目录.它将列出所有目录,不管它们在 ...

  4. python os 遍历 子目录中所有文件_Python处理文件系统的10种方法 !

    通过一个能够实现与文件系统进行交互的Python程序,我们可以实现很多有趣的应用,但是大部分人并不知道如何实现这种交互.本文为相关研发人员和数据科学家提供了一个实现指南,并重点介绍10个基本的os和s ...

  5. Angular应用中tsconfig.json文件配置说明及配置全局路径映射

    tsconfig.json文件配置说明 1. tsconfig.json文件中的选项配置 2. 配置全局路径映射 1. tsconfig.json文件中的选项配置 TypeScript编译器配置文件的 ...

  6. linux c 读取目录及其子目录下所有.jpg文件的文件名(无后缀)

    此程序用来生成<yolo v2中VOC数据生成labels所需的图片文件名文档>train.txt linux c 读取目录及其子目录下所有.jpg文件的文件名:   http://www ...

  7. php_flag .htaccess,Apache服务器中.htaccess文件的实用配置示例集锦

    .htaccess 是什么? htaccess (hypertext access,超文本访问) 是为网站所有者提供用于控制服务器环境变量以及其它参数的选项,从而增强他们网站的功能的文件.这些文件可以 ...

  8. Apache服务器中的.htaccess文件的配置

    如何在windows下创建.htaccess文件 首先, 暂且别管.htaccess是什么, 有什么作用, 让我们暂且解决首要问题:如何在windows下创建.htaccess文件. 在windows ...

  9. php的htaccess,深入理解PHP的.htaccess文件

    深入理解PHP的.htaccess文件 导语:PHP是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.下面我们来深入理解PHP的.hta ...

最新文章

  1. linux使关机命令失效,解决Linux系统在设置alias命令重启后失效的问题
  2. 交换机的三种转发模式
  3. win7右键点击文件夹进入命令窗口方法
  4. nba数据库统计_NBA板块的价值-从统计学上讲
  5. C++ 工厂模式(设计模式)
  6. Qt文档阅读笔记-Object Trees Ownership解析与实例(为何某些程序在被关闭的时候会崩溃)
  7. vmware虚拟机挂载Windows磁盘的两种方法
  8. NLP学习04--长短期记忆网络LSTM
  9. opendrive简介
  10. jbutton如何实现点击_Java Swing JButton按钮的实现示例
  11. 微信公众号编辑排版规范(试行版)
  12. 38、稀疏矩阵的十字链表表示和创建
  13. CodeVS3287[NOIP2013] 货车运输【Kruskal+倍增求LCA】
  14. 2018总结----对共享单车的思考
  15. 人类真的与恐龙无缘见面吗?看看雕刻和绘画怎样说
  16. 使用切图工具经常遇到的问题
  17. 电化学微量元素分析仪的执行标准
  18. TestNG入门指南
  19. 计划任务以及日志管理
  20. 顶尖团队!上海人工智能实验室2022春招及留学生招聘启动!

热门文章

  1. matlab 反向二值化,MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)...
  2. 华为OD机试题,用 Java 解【火星文计算 2】问题
  3. 2021年中国环境监测专用仪器仪表制造行业发展现状分析:主营收入、总资产进一步增长[图]
  4. 4月24日,今日信息差
  5. 使用开源微前端框架 Luigi 创建一个基于微前端架构的工程
  6. 2、GitHub新建分支并提交代码
  7. 追根溯源-C语言和Unix的发明史【转】
  8. 《算法零基础100讲》(第3讲) 矩阵
  9. excel判断数值是不是整数并设置背景色
  10. HTML——哄女朋友的相册模板