欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

htacess 某目录下禁止执行php

shiping1 的头像

在需要的目录下建立一个 .htaccess 文件并在里面写上

<FilesMatch ".(php|asp|jsp|js)$">     
    Deny from all    
</FilesMatch>

 

在需要的目录下建立一个 .htaccess 文件并在里面写上一行

php_flag engine off

用.htaccess文件保护个人目录

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

保护特定文件类型

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

<Files ^(*.jpeg|*.jpg|*.png|*.gif)>
   order deny,allow
   deny from all
</Files>

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

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$">
Allow from All
</FilesMatch>

禁止脚本执行

浏览器发送请求时,使用以下代码可以禁止执行.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

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

<FilesMatch "\.(php|pl|py|jsp|asp|htm|shtml|sh|cgi)$">
ForceType text/plain
</FilesMatch>

 

远程控制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)</tt>

<FilesMatch "^php5?\.(ini|cgi)$">
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</FilesMatch>
拒绝非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]

 

 

httpd.ini & .htaccess 文件保护禁止执行php、asp文件

 
作者:闵涛 文章来源:闵涛的学习笔记 点击数:339 更新时间:2012-10-4 17:51:33
 
 
httpd.ini & .htaccess 文件保护禁止执行php、asp文件 终极应用之文件保护 用 httpd.ini 或 .htaccess 来保护模板,顺便保护一下其他文件,保护启动后,不但无法访问目标文件,还可以自动记录访问时间、用户IP、访问地址、用户信息等信息。
  首先,在域名目录(不全是网站根目录web,是当前域名如:http://www.iwuxue.com/ 对应的目录,如果 http://www.iwuxue.com/bbs/ 子目录绑定了域名 bbs.iwuxue.com ,那么 http://www.iwuxue.com/bbs/ 目录就是 http://bbs.iwuxue.com/ 的域名根目录)建立一个safe子目录(如果不需要记录日志功能,可以不建立,也不写入下一步的文件)用来存放日志。再在域名根目录下建立一个 safe.php,代码如下:
以下是代码片段:
<?php
if(filesize("safe.txt")<10240){
if($_SERVER["HTTP_X_CLUSTER_CLIENT_IP"])$ip=$_SERVER["HTTP_X_CLUSTER_CLIENT_IP"];
elseif($_SERVER["HTTP_CLIENT_IP"])$ip=$_SERVER["HTTP_CLIENT_IP"];
elseif($_SERVER["REMOTE_ADDR"])$ip=$_SERVER["REMOTE_ADDR"];
else $ip="";
@$fp=fopen("safe.txt","a");
@fputs($fp,date("Y-m-d H:i:s",time())."|".$ip."|".$_SERVER['QUERY_STRING']."|".$_SERVER['HTTP_USER_AGENT']."\r\n");
@fclose($fp);
}else rename("safe.txt","safe/".time().".txt");
exit('MJJ,你想做什么?系统已经自动记录你的IP信息,请自觉离开!');
?>
继续在域名根目录下写入httpd.ini 或 .htaccess(这里仅以保护所有目录名为template的目录为例)。
  如果你的是IIS服务器安装了Rewrite模块,并开通了自定义httpd.ini权限,向域名根目录写入文件 httpd.ini ,代码如下:
以下是代码片段:
[ISAPI_Rewrite]
CacheClockRate 3600
RepeatLimit 32
RewriteEngine On
RewriteRule ^(.*/template/.*)$ /safe.php\?$1

备注:规则仅为 RewriteRule ^(.*/template/.*)$ /safe.php\?$1 一行。
  如果你的服务器为Apache服务器灵通了.htaccess权限,向域名根目录写入文件 .htaccess ,代码如下:
以下是代码片段:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*/template/.*)$ /safe.php\?/$1
</IfModule>
  备注:规则仅为 RewriteRule ^(.*/template/.*)$ /safe.php\?/$1 一行。
  如果要保护根目录下的 safe 目录,规则如下:
httpd.ini:
以下是代码片段:
RewriteRule ^(/safe/.*)$ /safe.php\?$1
.htaccess
以下是代码片段:
RewriteRule ^(safe/.*)$ /safe.php\?/$1
 备注:从上面这条规则我们注意到,.htaccess 中,中间 safe/.* 前面没有 / ,httpd.ini 有 /,我测试 .htaccess 的时候是在PHPWind Wamp 4.0下测试的。
  如果要同时保护所有目录名为template的目录以及根目录下的 safe目录和bbs目录下的admin、require目录,规则如下:
httpd.ini:
以下是代码片段:
RewriteRule ^(/(?:.*template|safe|bbs\/admin|bbs\/require)/.*)$ /safe.php\?$1
.htaccess
以下是代码片段:
RewriteRule ^((?:.*template|safe|bbs\/admin|bbs\/require)/.*)$ /safe.php\?/$1

  如果要禁止目录名为 attachment 的目录(附件目录)及其子目录禁止执行php、asp等文件,规则如下:
httpd.ini:
以下是代码片段:
RewriteRule ^(/.*attachment/.*(?:\.php|\.asp))$ /safe.php\?$1
.htaccess
以下是代码片段:
RewriteRule ^(.*attachment/.*(?:\.php|\.asp))$ /safe.php\?/$1
  备注:规则可多条,如果使用过伪静态重定向,直接把规则放到伪静态规则上面即可。如果前面没有写入safe.php并建立safe目录,打开受保护的页面会找不到网页或者显示自定义的404页面,如果写入了,访问的时候,就会将相关信息保存到根目录下的safe.txt,当safe.txt超过10K,就改名存放到safe目录。

 

  1. php_flag engine off  
  2.   
  3. <Files  ~ ".php">  
  4. order allow,deny  
  5. deny from all  
  6. </Files>  
  7.   
  8. <Files  ~ ".htm">  
  9. order allow,deny  
  10. deny from all  
  11. </Files>  
  12.   
  13. <Files  ~ ".html">  
  14. order allow,deny  
  15. deny from all  
  16. </Files>  
  17.   
  18. <FilesMatch (.*)\.htm$>    
  19.     order allow,deny      
  20.     deny from all      
  21. </FilesMatch>  
  22.   
  23. <FilesMatch (.*)\.html$>    
  24.     order allow,deny      
  25.     deny from all      
  26. </FilesMatch> 

 

普通分类: