【问题标题】:How can I limit access to RoleEnviroment on Azure for IIS Websites?如何限制对 Azure 上用于 IIS 网站的 RoleEnviroment 的访问?
【发布时间】:2023-04-08 06:11:02
【问题描述】:

我有一个设置,其中 webrole 在 IIS 上托管多个网站,通过存储帐户中的配置进行动态部署。

在 IIS 上将运行 3party 站点,这些站点不应访问 RoleEnviroment 的部署设置。我有什么方法可以限制对 IIS 站点的访问,使其无法在 Azure 上使用 RoleEnviroment?

小更新:

将重要设置移出配置文件可能会起作用。但是<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=c1azuretests;..." />

不能改为在运行时设置,因为这也是 3party 网站无法找到的。

【问题讨论】:

    标签: azure


    【解决方案1】:

    有趣而聪明的方法。虽然没有直接的方法来限制对 RoleEnvironment 的访问,但有一些解决方法:

    • 对第 3 方程序集执行完整性检查/扫描,如果他们引用/使用 RoleEnvironment,则拒绝执行(不是我最喜欢的,但仍然是一个可行的解决方案)
    • 将配置设置从云设置文件移到 Azure 存储表(我更喜欢这个)。现在,潜在的攻击者可以访问角色名称和配置,但无法访问设置。

    这两种方法各有利弊,但我更喜欢第二种方法。哪个需要编写更多代码值得商榷,但无论哪种情况,您编写的代码都是可重用的。第二种方法的好处更大更好。

    更新

    当我说将配置设置移动到 Azure 表而不是配置设置时,我指的是所有配置设置。因此,您的存储连接字符串也将在那里。而且您不必在代码中硬编码它们,而是从 Azure Table 中读取它们。这还有其他一些轻微的影响,例如您必须在 Azure 表存储中为这些设置实施监控系统,以确保在表中更新它们时在运行的代码中更新它们。就像您在更改正在运行的服务的配置时以自动方式所做的那样。

    我也不明白你为什么要just deploy a new package with changed setting.,因为你可以change settings while service is running without redeploying the whole service package!检查API Reference herewalk through guide here

    【讨论】:

    • 最后一种方法的一个问题是,如果我们不将存储连接字符串放在设置中,那么我们将不得不在代码中对其进行硬编码,然后每次必须进行新的部署时,它需要更改并重新编译。现在我们将其作为设置,意味着我们只需部署一个更改设置的新包。 (感谢 cmets)
    • 是否可以使用第一种方法来检测第三方代码在运行时使用反射访问RoleEnvironment的情况?
    • 啊,我明白你现在对桌子的意思了。当我说我们部署一个新的时,它不是旧的替代,而是一个新的部署,因为我们需要更多的电力或新的站点。随着您的更新,这意味着到 Azure 表的连接字符串将需要在角色设置中或硬编码中,与以前的问题相同。 (您的 cmets 仍在帮助我以不同的方式思考,这很好)。
    • @sharptooth,列出了最简单的方法here - 遍历每个第 3 方程序集的依赖关系,如果它引用 Microsoft.WindowsAzure.ServiceRuntime,则将其删除。然而,这将有效地阻止所有与 Azure 相关的东西,例如使用存储。可以使用更复杂的解决方案来检查特定的方法调用。 @s093294,关于连接到 Azure Table。
    • @astaykov:那个东西说它“像 Depends 工具”,但后者只找到静态依赖项,而不是使用 LoadLibrary()+GetProcAddress() 的情况。
    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2022-08-04
    • 2017-11-05
    相关资源
    最近更新 更多