我继承了一个我没有源代码的网站。所有页面都是预编译的。我的任务是在登录页面上显示通知,我们打算永远关闭该网站。
这可能是一个完全黑客,只要它有效,因为无论如何网站都会消失。
由于我没有源代码,我的想法是创建登录页面的呈现html的副本,并将其保存到静态html,其中包含通知,然后将IIS中的默认页面更改为指向到这个新页面。我做了一个初步测试,似乎工作正常。
我担心如果ASP.NET期望ViewState或WebResource.axd查询字符串参数与我在静态页面中硬编码的参数不同,它可能会停止工作。
这是一个可行的解决方案吗?
答案 0 :(得分:1)
WebResource.axd的:
AssemblyResourceLoader.GetWebResourceUrl
是一种负责生成WebResource.axd
网址的方法。
准确地说,CreateWebResourceCacheKey
方法用于自定义资源的网址生成,并且内置库有一组预定义的网址(WebForms.js
,WebUIValidation.js
,SmartNav.htm
,SmartNav.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生成,该生成将被注入到生成的文档中。