欢迎光临散文网 会员登陆 & 注册

软件测试 | 解码ASP.NET的视图状态

2023-09-14 14:03 作者:爱测软件测试  | 我要投稿

问题

问题VP.NET提供了一种机制,通过这种机制,客户端而不是服务器可以存储状态。即使相对较大的状态对象(几千字节)也可以作为表单域发送,并由网页浏览器在每次请求中发回。这被称为视图状态,存储在表单名为__VIEWSTATE的输入中。如果你的应用使用这个视图状态,则需要研究业务逻辑对它的依赖方式,并围绕着出错的视图状态来开发测试。在你能够对出错的视图状态构建测试之前,必须了解视图状态在应用中的用法。

解决方案

从Fire Onion(pluralsight.com/tools.a)获取ViewState Decoder。最简单的使用方法是将应用的URL(或特定的页面)复制并粘贴到URL框中。图4-4显示了ViewState Decoder2.1版以及它输出的小型快照。

讨论

有时程序不能从网页中获取视图状态。其实没有问题,你只需要查看网页的源代码(参见3.2节)并搜索<input type="hidden" name="__VIEWSTATE"...>。复制这个输入的取值并粘贴到解码器中。

假设图4-4中的例子是你的应用,那么它就暗示了几种可能的测试途径。视图状态中有URL。它们可能包含JavaScript或将用户定向到其他恶意网站吗?不同的整数值又意味着什么?

如果你的应用使用ASP.NET和视图状态,那么你应该问自己几个与之相关的问题:

在服务器处理视图状态时,会将视图状态中的某些数据插入到后续页面的URL或HTML中吗?

现在来分析图4-4中显示的几个URL。如果在这个应用中页面导航链接是从视图状态生成的会怎么样?黑客能够通过向用户发送假冒的视图状态来欺骗他们访问恶意站点吗?

视图状态时否受保护不会被篡改?

ASP.NET提供了几种保护视图状态的方式。其中一种方式是简单的散列值代码,这样如果视图状态有非预期的修改,服务器将能够捕获一个异常。另一种方式是一种加密机制,使得视图状态对客户端和潜在的攻击者不可见。

存在盲目地依赖于视图状态中的取值的程序逻辑吗?

设想某个应用将用户类型(普通用户或管理员)存储在ViewState中。攻击者只需修改它就能够更改自己的有效权限。

在需要为出错的视图状态创建测试时,你很可能会用到像TamperData(参见3.6节)或WebScarab(参见3.4节)这样的工具来注入新的取值。


软件测试 | 解码ASP.NET的视图状态的评论 (共 条)

分享到微博请遵守国家法律