【问题标题】:How are parameters for ScriptResource.axd calls generated?ScriptResource.axd 调用的参数是如何生成的?
【发布时间】:2012-11-29 21:00:25
【问题描述】:

客户在其网站周围有自定义防火墙规则,以防止任何数量的攻击。自定义规则之一阻止所有请求(GET 或 POST),包括双连字符,以防止 SQL 注入。昨晚更新他们的网站时,我们遇到了一个问题,在每个页面上,对 ScriptResource.axd 的调用之一都包含一个双连字符 (--),导致访问脚本被拒绝。

我们之前看到过这个问题,并认为我们已经通过使用 ScriptReferenceProfiler 来解决这个问题,以便生成我们需要组合的脚本列表,以便删除如此多的脚本引用。这一直有效,直到昨晚问题再次发生时更新。 (有趣的是,我重新运行了 ScriptReferenceProfiler,它识别的所有脚本都已经包含在 CompositeScript 列表中,所以我不知道这个文件来自哪里。)

我终于创建了一个新的 IIS 虚拟目录,其中没有出现双破折号的问题,尽管指向与之前的虚拟目录相同的目录和代码库。 (我将初始虚拟目录设置为重定向到新目录,这样用户就不必担心更新链接或书签。)我可以从this post 看到第一个参数是通过加密程序集名称生成的和资源名称,它解释了两个虚拟目录之间的值的差异。

但显然,我希望以后避免这种情况。有人对如何防止双破折号出现在 ScriptResource 请求中有任何想法吗?

作为参考,这发生在在 IIS 6/Windows Server 2003 上以 .NET 4.0 运行的 VB.Net 网站中。此外,被拒绝的脚本文件是为了某种 Infragistics 控件。 (为了获取文件,我暂时关闭了防火墙规则,然后重新启用了它。不过,我无法从脚本中看出它对 Infragistics 的作用。)

谢谢。

【问题讨论】:

    标签: asp.net iis iis-6 infragistics


    【解决方案1】:

    第一个参数 (d) 是程序集和资源。对于程序集,如果程序集是强命名的,则这包括名称和版本以及公钥标记。如果其中任何一个发生变化,那么资源的字符串也会发生变化。

    第二个参数 (t) 仅用于时间戳,这允许在更新包含嵌入式资源的程序集而不更改程序集名称或版本时更改资源,即使在站点上启用缓存也是如此。

    第一个参数的加密基于 MachineKey,因此您可以更改 MachineKey 以更改加密产生的字符串。即使您不控制您使用的所有程序集的名称和版本,这也可以帮助您在问题出现时有一个简单的解决方法。

    您可能感兴趣的相关阅读:

    【讨论】:

    • 我会将其标记为已接受,因为它帮助我更全面地了解正在发生的事情。我们最终与 Microsoft 和我们的防火墙提供商进行了交谈,并最终在规则中添加了一个特定的例外,以便在 Microsoft 向我们保证不会导致任何数据库攻击后,只允许在调用 ScriptResource.axd 和 WebResource.axd 时使用双破折号。我仍然不喜欢 Microsoft 使用的加密导致双破折号的预期行为,但他们不想追求这种选择。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2022-07-24
    • 2015-02-19
    相关资源
    最近更新 更多