【问题标题】:Does the viewstate or WebResource.axd paths ever change if the content does not?如果内容不改变,视图状态或 WebResource.axd 路径是否会改变?
【发布时间】:2014-07-30 22:09:58
【问题描述】:

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

这可能是一个彻头彻尾的黑客攻击,只要它有效,因为网站无论如何都会消失。

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

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

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

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    WebResource.axd:

    AssemblyResourceLoader.GetWebResourceUrl 是一个负责WebResource.axd URL 生成的方法。

    确切地说,CreateWebResourceCacheKey 方法用于自定义资源的 URL 生成,并且有预定义的内置库 URL 集(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。

    查看状态:

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


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

    【讨论】:

    • 我对 ViewState 进行了解码,其中没有任何内容会改变或每个用户。此外,如果需要任何交互,例如如果用户提交了错误的密码,原始登录页面将与更新的 ViewState 一起发送。只要用户最初看到通知,这是可以接受的。鉴于这些条件,你能想出我不能继续我的计划的任何原因吗?还有什么会导致 ViewState 失效的吗?
    • @adam0101 好吧,我认为那一切都会好起来的。但无论如何,这是完成任务的一种 hacky 方式,我敢打赌使用HttpModule,只是因为它更容易预测:)
    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2019-01-30
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多