我怎样才能禁用我的网站在IIS7的特定子目录上的PHP脚本?

如何禁用我的网站使用IIS7的特定子目录上的PHP脚本?

我有一个WordPress的博客,我想禁用“上传”目录的PHP。

你在这里有很多select。 所有的代码示例(每个方法一个)需要放在web.config文件中的“上传”文件夹(如果你不知道这一点)。

1) 删除负责处理* .php文件的处理程序 (在IISpipe理器中是“Handler Mappings”):

<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <remove name="PHP 5" /> </handlers> </system.webServer> </configuration> 

缺点:

  • 你需要知道处理程序名称
  • 处理程序名称可以在将来更改(pipe理员可能会改变以不同的方式处理PHP等)

2)使用请求过滤模块禁用所有的请求扩展名为.php – 服务器将发送404.7错误的客户端。 此模块与IIS 7.5捆绑在一起,但对于IIS 7.0,可能需要下载并安装pipe理包 。

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <security> <requestFiltering> <fileExtensions> <add fileExtension=".php" allowed="false" /> </fileExtensions> </requestFiltering> </security> </system.webServer> </configuration> 

如果您有多个PHP扩展名,您也需要列出它们(例如.phtml.php5等)。

3)使用URL重写模块创build一个规则来中止这样的请求。

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <clear /> <rule name="Abort PHP" stopProcessing="true"> <match url="^.*\.php$" /> <action type="AbortRequest" /> </rule> </rules> </rewrite> </system.webServer> </configuration> 
  • IIS 7.0没有URL Rewrite模块捆绑,而IIS 7.5有v1.1。 不幸的是,我没有安装这个扩展v1.1 – 只有v2,不能检查/保证这将在v1.1工作。 无论如何 – 我build议下载并安装URL Rewrite模块的版本2。
  • 您将需要扩展这个规则,以捕获您的设置(如.phtml.php5等)可能由PHP处理的其他文件扩展名。

4)使用URL重写模块创build规则来响应自定义错误,而不是处理这样的请求。

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <clear /> <rule name="Disable PHP" stopProcessing="true"> <match url="^.*\.php$" /> <action type="CustomResponse" statusCode="404" statusReason="No PHP here" statusDescription="Sorry mate" /> </rule> </rules> </rewrite> </system.webServer> </configuration> 

5)使用URL重写模块创build一个规则redirect到你自己的错误页面的所有这样的请求。

 <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <clear /> <rule name="Show Our Error Page for PPHP files" stopProcessing="true"> <match url="^.*\.php$" /> <action type="Rewrite" url="/404.php" /> </rule> </rules> </rewrite> </system.webServer> </configuration> 

上述规则将内部redirect(重写)这样的请求到网站根文件夹中的404.php文件(例如http://www.example.com/404.php


如果可能,使用#2 – 它将在URL重写步骤之前执行,这将对非常繁忙的服务器有利。

我知道这个线程有点旧了,但是我个人订阅了“Write + Execute = BAD”的思路,因此上传文件夹不应该执行。 考虑到这一点,超出静态文件处理程序的任何处理程序都可能被视为安全风险。

除了静态文件处理程序(不pipe其他处理程序被称为什么)(除了上面的#1的所有好处,但没有缺点之外):

 <configuration> <system.webServer> <handlers> <clear /> <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" /> </handlers> <staticContent> <mimeMap fileExtension=".*" mimeType="application/octet-stream" /> </staticContent> </system.webServer> </configuration>