如何在 IIS7 上禁用网站特定子目录中的 php 脚本?

如何在 IIS7 上禁用网站特定子目录中的 php 脚本?

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

我有一个 wordpress 博客,我想在“uploads”目录中禁用 php。

答案1

这里有很多选择。所有代码示例(每种方法一个)都需要放在网页配置在您的文件中“上传”文件夹(如果您不知道的话)。

1)删除处理程序负责处理 *.php 文件(在 IIS 管理器中它是“处理程序映射”):

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

缺点:

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

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

<?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 重写模块创建一个规则中止这样的请求。

<?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 重写模块,而 IIS 7.5 有 v1.1。不幸的是,我没有安装此扩展的 v1.1——只有 v2,无法检查/保证它在 v1.1 中是否能正常工作。无论如何——我建议下载并安装版本 2URL 重写模块
  • 您将需要扩展此规则以捕获在您的设置中可能由 PHP 处理的其他文件扩展名(例如.phtml.php5等等)。

4)使用URL 重写模块创建一个规则使用自定义错误进行响应而不是处理此类请求。

<?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 重写模块创建一个规则重定向到您自己的错误页面对于所有此类请求。

<?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>

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


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

答案2

我知道这个帖子有点老了,但我个人赞同“写入 + 执行 = 坏”的思想流派,因此上传文件夹永远不应该执行。考虑到这一点,任何超出静态文件处理程序的处理程序都可能被视为安全风险。

删除除静态文件处理程序之外的所有处理程序(无论其他处理程序的名称如何)(具有上述第 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>

相关内容