应用软件开发最佳实践

日期: 2009-07-07 作者:Michael Cobb翻译:Sean 来源:TechTarget中国 英文

问:从安全的角度,你如何看待Web应用程序开发中的帐号注销超时设置、缓存以及其他最佳实践的准则?   答:Web应用程序必须通过建立会话来记录用户的请求,帐号的注销功能是活跃会话管理的一个重要方面。你的应用程序应该为用户提供一种方法途径,例如在每个页面上提供一个退出按钮或是链接,以便让用户退出帐号。另外,在一定时间内没有登录的用户应该被锁定起来,直到再次登录。   这一时间长度应该根据你的用户与Web应用的交互方式以及数据的敏感程序来确定。

例如,一些银行网站把超时时间定为10分钟,其中一个考虑的因素就是它们的用户所访问的都是非常敏感的数据。另外,由于“记住我(Remember Me)”这一选项……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问:从安全的角度,你如何看待Web应用程序开发中的帐号注销超时设置、缓存以及其他最佳实践的准则?

  答:Web应用程序必须通过建立会话来记录用户的请求,帐号的注销功能是活跃会话管理的一个重要方面。你的应用程序应该为用户提供一种方法途径,例如在每个页面上提供一个退出按钮或是链接,以便让用户退出帐号。另外,在一定时间内没有登录的用户应该被锁定起来,直到再次登录。

  这一时间长度应该根据你的用户与Web应用的交互方式以及数据的敏感程序来确定。例如,一些银行网站把超时时间定为10分钟,其中一个考虑的因素就是它们的用户所访问的都是非常敏感的数据。另外,由于“记住我(Remember Me)”这一选项能使超时设置失效,因此你的程序还应该禁用自动登录以及常连接(keep-alive)功能。

  不幸的是,你对应用内容的客户端缓存的控制能力是非常有限的。如果不希望浏览器缓存你的内容,那么你可以通过设置响应报文里的缓存控制指令来影响客户端的缓存操作。如果你不希望浏览器缓存你的网页,把响应头里的cache-control设为no-store就可以了。这一设置指示浏览器不要存储对它的任何响应或请求。不过,no-cache和no-store是在HTTP 1.1里定义的,因此无法被HTTP 1.0缓存支持。此外,对于像PDF文档和Excel表格这样的非HTML内容,即使上面这些标签已经被设置了也往往会被缓存。另一点需要引起重视的是,一些浏览器可以存储用户填写的表单数据,这常常不安全。如果你的任何一个Web窗口采集敏感信息,那一定加上AUTOCOMPLETE=FALSE这一属性来警告浏览器不要保存数据。我之所以用“警告”这个词,是因为这一属性并不在HTML规范之内的。如果用户所用的是共享的PC机,而且你认为你的程序处于高危险中,那就需要要求用户清空浏览器的缓存和历史记录。

  同样重要的是如果用户退出或会话超时,要清空服务端的会话状态,销毁服务器上的会话 ,还要把浏览器里的会话cookie覆盖掉,这是因为浏览器只有在它的线程实际终止了cookie之后才会把会话cookie删除掉。这样才能确保用户超时或退出后无法发起会话重放式攻击(session replay attack)。此外,URL里会话ID也不应该出现,因为可能会被肩窥者(shoulder surfer)看到、被浏览器缓存、还会被记录到其它网站的来路链接(referrer)里。理想的情况下,用户的整个会话,包括会话标识符,都应该用SSL加密保护,这样才能避免会话ID被网络窃听截取。会话ID应该是一长串随机生成的复杂数字,而且应该在进行重要处理前,或使用了一定次数或时间后废除并重新生成,特别是改用SSL后更应如此。最后,一定要把应用会话管理的目标和实现机制记录下来,放到你的安全策略里。

翻译

Sean
Sean

相关推荐