asp.net - ScriptResource.axd 调用的参数是如何生成的?

标签 asp.net iis iis-6 infragistics

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

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

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

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

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

谢谢。

最佳答案

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

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

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

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

关于asp.net - ScriptResource.axd 调用的参数是如何生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634621/

相关文章:

javascript - 将 Javascript 对象数组传递给 C# 代码隐藏

asp.net - 为我的每个客户提供专用数据库和应用程序池是否可扩展?

javascript - 为什么自定义验证器在 jQuery 的 document.ready 中不起作用

asp.net - .Net 核心应用程序无法通过 FTP 上传,托管在 IIS 上

c# - 很难让 Visual Studio 2010 附加到远程进程

c# - session 状态未在页面之间保存

perl - 处理 Perl IIS 7.5

asp.net-mvc - Azure Web 角色启动时 Application_Start 循环

c# - 如何从异常中获取 IIS 子状态代码?

model-view-controller - 在 IIS 6 上使用 .NET 4 时获取 404,无论是否有 MVC