【问题标题】:Web application security网络应用安全
【发布时间】:2010-11-09 09:25:25
【问题描述】:
我正在测试一个 Web 应用程序的安全漏洞,我遇到了以下 2 种情况。
使用代理,我拦截了通过应用程序的所有请求并保存所有 cookie。使用这些保存的 cookie,我可以在另一台机器上恢复会话并访问用户的个人信息,而无需任何进一步的身份验证。我认为任何管理员都可以通过这种方式获取网络上所有用户的个人信息。
与案例 1 相同,但我能够在不同的机器上恢复会话即使在原始用户正确注销后。即会话似乎在服务器上仍然有效,即使在原始用户注销并且所有与会话相关的 cookie 都在客户端删除后。
我相当肯定案例 2 是 Web 应用程序中的一个安全漏洞。我想知道案例 1 在技术上是否也可以被视为 Web 应用程序中的漏洞。如果是这样,有什么方法可以解决这个问题?
【问题讨论】:
标签:
session
web-applications
cookies
【解决方案1】:
案例 1。
系统管理员可以恢复您的会话并不是真正的安全漏洞,因为系统管理员通常可以恢复密码哈希并尝试破解它们或创建一些安全漏洞以针对其用户使用。
虽然考虑到系统管理员可能会尝试恢复您的会话可能是无害的,但在上游可能并非如此(在有人连接的互联网的其余部分),并且通常认为实现所有用户登录是一种好习惯/HTTPS 中的敏感活动。
仅评论上面的回复,当通过 HTTPS 使用 cookie 时,不可能将它们从外部恢复到计算机(如中间人)。
案例 2。
这并不是真正的安全漏洞。在考虑这种情况时,您假设情况 1,首先不应该发生这种情况(有人嗅探您的 cookie)。
注意:
除了通过 HTTPS 保护登录/敏感活动之外,最好对同一域中的整个网站进行加密,因为如果同一域中的某些页面未加密,则可以向客户端注入流量以暴露其 cookie。
当用户没有主动注销时(单击 webapp 上的删除标识的按钮),很难从服务器中删除用户标识。如果用户只是关闭了页面,服务器并不知道用户已经登录,并认为用户标识仍然有效。
您可以将用户与 ip 关联,这使攻击者难以嗅探 cookie 并从不同的 ip 使用它们,但它在普通用户子网中不起作用,因为使用 NAT 子网中的所有机器都具有相同的外部ip。
注意:
使用自签名加密是有危险的。尽管它可以保护用户免受外部嗅探,但有人很容易欺骗粗心的用户登录您的应用程序的欺骗版本。我已经通过 WAP 上的强制门户网站做到了这一点。
【解决方案2】:
如您所述,SSL 将有助于防止中间人攻击。
您可以在会话中存储一个变量,其中包含用户的 IP、用户代理等或它们的哈希值,并在每个请求中检查它,以便如果它被劫持,劫持者将不得不伪造这些。不完美,但有帮助。
【解决方案3】:
我知道只有一 (1) 个网站在个人资料页面中有会话管理器。您可以查看您仍在登录的位置,选择任何一个或全部,然后将其注销。
某些内容管理系统允许最长登录时间。根据您的用户如何使用您的页面(例如:用户在页面上停留的时间永远不会超过 3 分钟),您可以将此值设置得非常低。
这不是 Web 应用程序中的技术漏洞。然而,Web 应用程序是负责解决这些问题的指定方。
【解决方案4】:
关于案例1是否是漏洞的问题,当然是。为什么?因为它是系统设计、实施或操作中的缺陷或弱点,可能会被利用来违反系统的安全策略,这就是漏洞的确切定义。
为了解决这个问题,我通常做的是ro记录成功登录发送的用户代理。我对其进行加密,然后每次用户想要从服务器获得任何东西时,我都会检查当前用户代理是否与登录时发送的用户代理匹配。
您可以将其与 IP 地址结合起来,检查这两个参数是否在请求之间发生变化,如果发生变化,则很可能有人劫持了 cookie。
if ( ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) )
die( "{ 'succes': false , 'text' : 'Please re-log in.' );