当用户在 Web 应用程序中不同的 ASP.NET 页面之间导航的时候,ASP.NET 会话状态就允许你存储并获取用户的状态值。ASP.NET 会话状态对来自于相同浏览器的、在一个有限的计时窗口(即会话)中,并能够在会话期间持续保持变量的值的时候会对请求进行识别。浏览器会话在会话 Cookie 中或在 URL(会话状态被配置成无 Cookie 的时候)中被识别。

ASP.NET 会话状态默认时被启用于所有的 ASP.NET 应用程序并被配置成使用会话 Cookies 来对浏览器会话进行识别。

默认时,ASP.NET 会话状态把会话变量的值存储到内存中,但是你同样能够配置会话状态来把会话变量的值存储到状态服务器、SQL Server,或者自定义的会话状态存储中。

虽然如下所示的编码和最佳配置练习能够改进应用程序的安全性,但是同样重要的是,你需要为你的应用程序服务器持续保持对最新的 Microsoft Windows 和 Internet 信息服务(IIS)安全补丁的更新,以及 Microsoft SQL Server、Active Directory,和应用程序中所使用的其他数据源的任何补丁。

更多关于编写安全代码并保护应用程序的最佳练习的详细信息,请参考由 Michael Howard 和 David LeBlanc 共同编著的《编写安全代码》一书以及 Microsoft Patterns 和 Practices(http://www.microsoft.com/resources/practices/default.mspx)中所提供的指导。

保护会话状态的配置

会话状态特征在默认时是被启用的。在默认的配置设定被设置成最安全值之前,如果你的应用程序并不需要它的时候,你就应该禁用会话状态。关于会话状态配置设定和它们的默认值的信息,请参考:[sessionState 元素(ASP.NET 设定结构)]。

保护配置值

当在配置文件中为应用程序存储了敏感信息的时候,你应该使用被保护的配置来加密这些包含了敏感信息的值。特别的敏感信息包括有被存储在 machineKey 配置元素中的加密关键字和被存储在 connectionStrings 配置元素中的数据源连接字符串。关于更多信息,请参考:[使用被保护的配置来加密配置信息]。

保护会话状态数据源的连接

连接字符串

与前面所提到的一样,对被存储在连接到运行了 SQL Server 的计算机、会话状态服务,或者其他数据源的字符串中的敏感信息进行保护是重要的。要保持连接到数据服务器的安全性,建议你使用已保护的配置来加密配置中的连接字符串信息。更多信息,请参考:[使用被保护的配置来加密配置信息]。

使用被集成的安全性来连接到 SQL Server

你应该使用被集成的安全性来连接到运行了 SQL Server 的计算机,从而避免出现连接字符串被妥协以及用户 ID 和密码被暴露的可能性。在你指定了一个使用被集成的安全性来连接到一台运行了 SQL Server 的计算机的连接的时候,会话状态特征就会恢复其进程的身份。你应该确保运行了 ASP.NET(例如,应用程序池)的进程身份是默认的进程帐号或被限制的用户帐号。关于更多信息,请参考:[ASP.NET 角色扮演和会话状态模式]。

保护会话 ID

在保护应用程序和数据的时候,对通过网络已经被暴露给不必要的来源并且在一个重复式应用程序反向攻击中对已经被使用的会话标识符进行保护是重要的。如下建议能够改进你的会话标识符的安全性。

  • 用安全套接层(SSL)来保护你的应用程序。
  • 为会话的 Timeout 属性指定一个更小的值。同样需要考虑通过使用客户端脚本在客户端之上的一个重定向(重定向发生的时间与会话超时的时间相同),或者通过使用 AddHeader 方法来添加一个重新刷新的 HTTP 头。
  • 避免使用无 Cookie 的会话。如果你指定了无 Cookie 的会话,就需要通知用户不能使用电子邮件、书签,或者保存包含了会话 ID 的链接。
  • 避免指定 AutoDetectUseDeviceProfile 来作为 Cookie 的模式。
  • 允许用户登出,同时你还应该调用 System.Web.SessionState.HttpSessionState.Abandon 方法。并通知用户在登出完成之后关闭浏览器。
  • 在使用无 Cookie 会话的时候,把 regenerateExpiredSessionID 配置成 true,该配置始终会在出现了一个已过期的会话标识符的时候启动一个新的会话。

保护使用会话状态的 Web 页面

应用程序页面与应该通过使用标准的 Web 安全性机制(如使用安全套接层 SSL)而被保护的敏感数据以及需要通过用户登入来完成的敏感操作(如更新个人信息或删除帐号)一起合作。

另外,页面不应该暴露敏感的特征数据(如密码,以及某些明文格式的用户名称)。确保显示使用了 SSL 所产生的信息的页面只对于已验证的用户可用。

错误消息和事件

异常

要防止敏感的信息被暴露给不必要的来源,就需要对你的应用程序进行配置,使其只在当客户端是 Web 服务器本身的时候才显示详细的错误消息,否则就不显示任何详细的错误消息。关于更多信息,请参考:[customErrors 元素(ASP.NET 设定结构)]。

事件日志

如果你的服务器是运行的 Windows Server 2003,那么你可以通过保护事件日志的方式来改进应用程序的安全性,并通过对关于尺寸、保持时间,以及等等这些可能导致拒绝服务攻击的相关参数进行设置。

自定义的会话状态存储提供者

在创建一个自定义的会话状态存储提供者的时候,就需要确保你已经遵循了最佳安全练习中的指导来避免常见的攻击(如在使用数据库的时候所发生的 SQL 注入攻击)。在使用了自定义的会话状态存储提供者的时候,就需要确保提供者已经遵循了最佳安全练习中的指导被回顾。

转载于:https://www.cnblogs.com/Laeb/archive/2007/01/19/625123.html

保护 ASP.NET 会话状态相关推荐

  1. [转载]保护 ASP.NET 应用程序的安全

    查看全部的安全性指导主题 Microsoft Corporation 本单元概要 保护 ASP.NET Web 应用程序依赖于完全受到保护的网络.主机和平台基础结构.如果果真如此,攻击者将试图利用 W ...

  2. 保护 ASP.NET 应用程序的安全

    本单元概要 保护 ASP.NET Web 应用程序依赖于完全受到保护的网络.主机和平台基础结构.如果果真如此,攻击者将试图利用 Web 应用程序和 Web 服务(它们通常侦听端口 80)中的漏洞.如果 ...

  3. ASP.NET 会话状态

    1.ASP.NET 会话状态 2.会话状态模式 3.ASP.NET在不同应用程序之间共享Session 4.Session无故丢失 5.客户端使用Cookieless的方式存储Session信息 6. ...

  4. 【译】使用Jwt身份认证保护 Asp.Net Core Web Api

    原文出自Rui Figueiredo的博客,原文链接<Secure a Web Api in ASP.NET Core> 摘要:这篇文章阐述了如何使用 Json Web Token (Jw ...

  5. ASP.NET 会话状态概览

    ASP.NET 会话状态允许你为用户在不同的 ASP.NET 页面导航之间存储并获取状态值.因为 HTTP 是无状态的协议,所以这意谓着 Web 服务器会把页面的每个 HTTP 请求都视为是相对独立的 ...

  6. 保护ASP.NET 应用免受 CSRF 攻击

    CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/ ...

  7. 保护 ASP.NET Web 部件页面

    Web 部件是 ASP.NET 的一个新特征,它提供给终端用户对 Web 页面进行更改或个性化的能力.拥有已个性化的 Web 页面是非常强大的 Web 应用程序,但是它同样有需要被开发者所了解的安全隐 ...

  8. asp html表单没有csrf保护,ASP.NET MVC 和网页中的 XSRF/CSRF 防护

    ASP.NET MVC 和网页中的 XSRF/CSRF 防护 03/14/2013 本文内容 跨站点请求伪造(也称为 XSRF 或 CSRF)是一种针对 Web 托管型应用程序的攻击,恶意网站凭此可以 ...

  9. 在 ASP.NET 中实现会话状态的基础

    简介 在 Web 应用程序这样的无状态环境中,了解会话状态的概念并没有实际的意义.尽管如此,有效的状态管理对于大多数 Web 应用程序来说都是一个必备的功能.Microsoft® ASP.NET 以及 ...

最新文章

  1. 当前日期得到本周的开始和结束日期
  2. 太原科技大学计算机在哪个校区,太原科技大学有几个校区及校区地址 哪个校区最好...
  3. springmvc整合redis架构搭建实例
  4. 拷贝构造函数的调用以及浅拷贝与深拷贝的理解
  5. htm怎么让图片和搜索框在同一行_新手怎么玩好小红书
  6. ECMAScript 2015(ES6)规范中的promise
  7. python type error是什么意思_Python-TypeError:“ int”对象不可调用
  8. 程序员书籍哪里找?有这个GitHub项目就够了
  9. PickerView的使用
  10. 2020年mathorcup数模A题总结回顾
  11. 装饰器设计模式(模拟咖啡)
  12. 计算机汉字怎么制作的,如何制作自己的字体?教你快速制作自己手写字体
  13. 计组头哥实验 第1关 8位可控加减法电路设计
  14. debian7 修改系统时间
  15. 老王论坛蓝色大屏幕调节亮度
  16. Hulu机器学习问题与解答系列 | 二十九:WGANs:抓住低维的幽灵
  17. 什 么 是 可 重 入 性 , 为 什 么 说 Synchronized 是 可 重 入 锁 ?
  18. mysql 值很少的索引_关于 Mysql 字段值分布很少的字段要不要加索引的问题.
  19. iOS App 常用的分类
  20. 七校联合NewStarCTF 公开赛赛道WEEK2 web wp

热门文章

  1. Android抽象布局——include、merge 、ViewStub
  2. Linux网络配置命令
  3. Go 语言编程 — validator 数据校验工具
  4. 5G 标准 — R15
  5. 5G — 3 大场景、8 大 KPI
  6. 电路设计中三极管和MOS管做开关用时的区别
  7. vue-router学习笔记(一)
  8. 2017-2018-1 20155222 《信息安全系统设计基础》第8周学习总结
  9. 直击面试现场:程序员阿里应聘,2轮4小时成功搞定16Koffer!
  10. Xcode终端常用的指令-终端输入