2

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

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

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

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

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

谢谢。

4

1 回答 1

4

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

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

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

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

于 2013-01-03T19:47:51.397 回答