利用 ASP.NET 的内置功能抵御 Web 攻击
来源:互联网 发布:武汉理工大学网络 编辑:程序博客网 时间:2024/05/12 05:11
如果攻击者可以提供有效的身份验证 cookie,黑客就可以进入,请求将被照常处理。服务器上根本不会检查视图状态内容(当 EnableViewStataMac 为 off 时),或者只会检查是否被篡改过。默认情况下,试图状态中没有机制可以将该内容与特定的用户关联起来。攻击者可以轻松地重用所获取的视图状态,冒充另一个用户合法地访问该页,以生成虚假请求。这正是 ViewStateUserKey 介入的地方。
如果选择准确,该属性可以将用户特定的信息添加到视图状态。处理请求时,ASP.NET 会从视图状态中提取秘钥,并将其与正在运行的页的 ViewStateUserKey 进行比较。如果两者匹配,请求将被认为是合法的;否则将引发异常。对于该属性,什么值是有效的?
为所有用户将 ViewStateUserKey 设置为常量字符串,相当于将它保留为空。您必须将它设置为对各个用户都不同的值 — 用户 ID,会话 ID 更好些。由于一些技术和社会原因,会话 ID 更为合适,因为会话 ID 不可预测,会超时失效,并且对于每个用户都是不同的。
以下是一些在您的所有页中都必不可少的代码:
void Page_Init (object sender, EventArgs e) {
ViewStateUserKey = Session.SessionID;
:
}
为了避免重复编写这些代码,您可以将它们固定在从 Page 派生的类的 OnInit 虚拟方法中。(请注意,您必须在 Page.Init 事件中设置此属性。)
protected override OnInit(EventArgs e) {
base.OnInit(e);
ViewStateUserKey = Session.SessionID;
}
总体说来,使用基 page 类始终都不失为一件好事,我在 Build Your ASP.NET Pages on a Richer Bedrock 一文中已经进行了说明。如果您要了解更多有关一次单击攻击者的伎俩的信息,可以在 aspnetpro.com 找到一篇非常好的文章。
下面的代码片段演示了如何轻松修改 cookie 的过期日期。
void OnLogin(object sender, EventArgs e) {
// Check credentials
if (ValidateUser(user, pswd)) {
// Set the cookie's expiration date
HttpCookie cookie;
cookie = FormsAuthentication.GetAuthCookie(user, isPersistent);
if (isPersistent)
cookie.Expires = DateTime.Now.AddDays(10);
// Add the cookie to the response
Response.Cookies.Add(cookie);
// Redirect
string targetUrl;
targetUrl = FormsAuthentication.GetRedirectUrl(user, isPersistent);
Response.Redirect(targetUrl);
}
}
您可以在自己的登录表单中使用这些代码来微调身份验证 Cookie 的生存期。
此外,应当注意 ASP.NET 公开了一个鲜为人知的类,可用于编码和哈希任何序列化的对象.该类为 LosFormatter,ViewState 实现用于创建回程到客户端的编码文本正是同一个类。
private string EncodeText(string text) {
StringWriter writer = new StringWriter();
LosFormatter formatter = new LosFormatter();
formatter.Serialize(writer, text);
return writer.ToString();
}
前面的代码片段演示了如何使用 LosFormatter 来创建类似视图状态的内容,对其编码并进行哈希。
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击.txt
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- 利用ASP.NET的内置功能抵御Web攻击
- 利用ASP.NET的内置功能抵御Web攻击
- 利用 ASP.NET 的内置功能抵御Web攻击
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- SQLServer分页
- Android 应用程序之间数据共享—ContentProvider
- linux主机性能测试
- SQL SERVER 防止攻击对象的策略
- 项目升级到Delphi 2010总结
- 利用 ASP.NET 的内置功能抵御 Web 攻击
- Hibernate一对多、多对一关联关系的使用
- 防止用户重复登陆系统(供参考程序流程思想)
- 工作记录0308
- Linux 多线程编程问题
- ubuntu监控网速
- 一个简单的Linux内核模块实现
- 设备驱动程序p57
- Google回应关于Android恶意程序的远程应用删除