跳转至

限制目录脚本执行权限

apache:

  • 在虚拟主机配置文件中增加php_flag engine off指令即:

    Options FollowSymLinksAllowOverride NoneOrder allow,denyAllow from allphp_flag engine off

  • 添加内容至当前目录.htaccess文件: RewriteEngine on RewriteCond % !^$RewriteRule uploads/(.*).(php)$ – [F]RewriteRule data/(.*).(php)$ – [F]RewriteRule templets/(.*).(php)$ –[F]


Nginx:

Nginx更简单,直接通过location条件匹配定位后进行权限禁止,可在server配置段中增加如下的配置。

  • 如果是单个目录:

    location ~* ^/uploads/.*\.(php|php5)${deny all;}

  • 如果是多个目录:

    location ~* ^/(attachments|uploads)/.*\.(php|php5)${deny all;}

  • 注意:这段配置文件一定要放在下面配置的前面才可以生效。

    location ~ \.php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include    fastcgi_params;
    }
    
  • 最后给一个完整的配置示例

    location ~ /mm/(data|uploads|templets)/*.(php)$ {deny all;}location ~ .php$ {try_files $uri /404.html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}


IIS6:

打开IIS中站点,在站点uploads目录、data目录以及静态html生成目录点击右键,菜单中选择“属性”,在目录属性面板选择执行权限为“无”即可。(如图1)

title

IIS7:

在IIS的左侧选中该目录,切换到功能视图,打开“处理程序映射”功能,点击右侧的“编辑功能权限”,将“脚本”这一项取消掉即可

title

title

若想让指定目录只有读取权限,只要在目录中放置一个名为 “web.config“,内容为

<pre class="brush:xml;">
<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.webServer> 
<handlers accessPolicy="Read" /> 
</system.webServer> 
</configuration> 

的(配置)文件即可。

这样,在访问该目录下的 asp、php等可执行文件时,IIS7就会输出如下错误提示:

HTTP 错误 401.3 - Unauthorized

由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面

iis7.5

因为服务器目前只需要支持php,那么就可以把asp,asp.net都删除了。iis7.5比较好的一点就是全部通过根目录的web.config控制,下面提供这个文件,大家就可以参考一下了

<pre class="brush:xml;">
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="TRACEVerbHandler" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="WebServiceHandlerFactory-ISAPI-2.0-64" />
      <remove name="WebServiceHandlerFactory-ISAPI-2.0" />
      <remove name="WebServiceHandlerFactory-Integrated" />
      <remove name="WebAdminHandler-Integrated" />
      <remove name="TraceHandler-Integrated" />
      <remove name="SSINC-stm" />
      <remove name="SSINC-shtml" />
      <remove name="SSINC-shtm" />
      <remove name="SimpleHandlerFactory-ISAPI-2.0-64" />
      <remove name="SimpleHandlerFactory-ISAPI-2.0" />
      <remove name="SimpleHandlerFactory-Integrated" />
      <remove name="SecurityCertificate" />
      <remove name="PageHandlerFactory-ISAPI-2.0" />
      <remove name="PageHandlerFactory-Integrated" />
      <remove name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" />
      <remove name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" />
      <remove name="HttpRemotingHandlerFactory-soap-Integrated" />
      <remove name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" />
      <remove name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" />
      <remove name="AXD-ISAPI-2.0-64" />
      <remove name="HttpRemotingHandlerFactory-rem-Integrated" />
      <remove name="AXD-ISAPI-2.0" />
      <remove name="AssemblyResourceLoader-Integrated" />
      <remove name="PageHandlerFactory-ISAPI-2.0-64" />
      <remove name="ASPClassic" />
    </handlers>
  </system.webServer>
</configuration>
</pre>

其实就是通过 <remove name="" />进行删除的,如果想恢复指定的某个映射,可以删除对应的名称即可。