如果内容不是,viewstate或WebResource.axd路径是否会改变?

时间:2014-07-30 22:09:59

标签: asp.net webforms

我继承了一个我没有源代码的网站。所有页面都是预编译的。我的任务是在登录页面上显示通知,我们打算永远关闭该网站。

这可能是一个完全黑客,只要它有效,因为无论如何网站都会消失。

由于我没有源代码,我的想法是创建登录页面的呈现html的副本,并将其保存到静态html,其中包含通知,然后将IIS中的默认页面更改为指向到这个新页面。我做了一个初步测试,似乎工作正常。

我担心如果ASP.NET期望ViewState或WebResource.axd查询字符串参数与我在静态页面中硬编码的参数不同,它可能会停止工作。

这是一个可行的解决方案吗?

1 个答案:

答案 0 :(得分:1)

WebResource.axd的:

AssemblyResourceLoader.GetWebResourceUrl是一种负责生成WebResource.axd网址的方法。

准确地说,CreateWebResourceCacheKey方法用于自定义资源的网址生成,并且内置库有一组预定义的网址(WebForms.jsWebUIValidation.jsSmartNav.htmSmartNav.js)。

private static int CreateWebResourceUrlCacheKey(Assembly assembly, string resourceName,
            bool htmlEncoded, bool forSubstitution, bool enableCdn, bool debuggingEnabled, bool secureConnection) {
    int hashCode = HashCodeCombiner.CombineHashCodes(
        assembly.GetHashCode(),
        resourceName.GetHashCode(),
        htmlEncoded.GetHashCode(),
        forSubstitution.GetHashCode(),
        enableCdn.GetHashCode());
    return HashCodeCombiner.CombineHashCodes(hashCode,
        debuggingEnabled.GetHashCode(),
        secureConnection.GetHashCode());
}

正如您所看到的,URL生成是确定性的并且基于哈希码。只要您不更改哈希计算算法可能不同的框架版本,您就可以安全地使用硬编码的URL。

查看状态:

简短的回答是 - 如果您希望用户与应用程序进行交互,则无法对视图状态值进行硬编码。我建议您阅读View State and Security Implications文章的Understanding ASP.NET View State部分。它解释了一些MAC (Machine Authentication Check)ViewStateUserKey值,这些值用于使视图状态更安全,几乎不可能伪造其值。


因此,如果您依赖于视图状态,我建议您创建自定义HttpModule(请参阅Walkthrough: Creating and Registering a Custom HTTP Module),将生成的程序集放到app bin文件夹中,然后注册在web.config。新模块将负责通知html生成,该生成将被注入到生成的文档中。