IIS | 阻止目录中文件的执行

IIS | 阻止目录中文件的执行

我正在通过 PHP 应用程序处理用户上传。

我想确保服务器的安全,以便用户无法利用任何漏洞,例如上传 php shell 并执行它。

我已将其设置为所有上传内容都移出 webroot 并移至单独的文件夹。为了增加安全性,我已从 IUSR 中删除了特定文件夹上除“读取”之外的所有权限。

更进一步的是,我被告知通过 IIS 禁用文件夹上的脚本执行。

考虑到我的情况和我已经做的事情,这有必要吗?如果是,我如何使用 IIS 8 实现这一点。

谢谢

答案1

对于“这是否有必要”这个问题的答案是,我们需要检查此应用程序和您的组织所需的安全级别。

安全最佳实践提倡“纵深防御”方法,这意味着安全是一层层的安全控制来保护信息(或其他)资产。

要确定这些数据是否需要额外的控制,请评估风险 - 存在可被利用的威胁的可能性有多大,以及这些数据/系统被破坏的影响是什么 - 不仅要考虑数据的机密性,还要考虑恶意用户更改数据或破坏系统或删除数据。然后确定控制的成本是否超过实施控制的收益。如果没有,则实施控制,如果实施控制更“昂贵”,则接受风险。

拒绝对虚拟目录的脚本访问是一件相当简单的事情,并且可以作为一层防御,防止恶意用户提升其权限。通常实施此控制是为了使上传到目录的文件无法执行 - 例如,获得远程 shell。因此,如果“成本”微不足道,并且我们假设获得远程 shell 会产生很大的影响,即使可能性很低,那么答案就是禁用文件夹上的脚本执行(如果您不同意此评估,请随意在此处做出自己的决定)。

要在 IIS 8 中禁用文件夹上的脚本访问,步骤应与 IIS 7 相同,在 web.config 中配置处理程序映射。

此链接解释了各种选项:

https://webmasters.stackexchange.com/questions/28733/prevent-iis-from-executing-scripts-in-a-specific-directory

这可能就是您想要的,它将保留静态文件处理程序:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <clear />
            <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
        </handlers>
    </system.webServer>
</configuration>

另请注意该页面上有关所需配置的最后一条评论:

只是为了给可能遇到相同问题的其他人补充已发布的解决方案:在我弄清楚处理程序被锁定在顶层之前,这些方法都不起作用。我不是服务器管理员,甚至都不是,所以这花了我一点时间。在 applicationHost.config 文件被编辑为允许覆盖之前,即使在较低级别的 web.config 文件中包括一个空白部分也足以破坏从该级别向下的所有内容。不过现在效果很好。

相关内容