对话认证是一个非常大的话题,涉及到各种认证协议和框架,如cookie、session、sso、oauth、openid等,问题较多的在cookie上,cookie是Web服务器返回给客户的常用文字串,用于识别用户的身份和认证状况另外,session是保存在服务器方面的信息,如果没有代码操作,客户方面不能直接修改session,比较安全。
认证脆弱性在代码审计中出现在cookie认证用session认证,而是直接将用户信息保存在cookie中,使用程序时直接调用。一般来说,这个过程有统一的函数来调用数据,容易引起SQL注入和越权等漏洞。挖掘登录认证脆弱性时,可以先看程序登录功能代码,看看登录过程整体的业务逻辑是否可以控制session值,或者是否可以直接绕过密码认证的脆弱性,还需要注意程序认证是否为登录代码以前看到的相当粗糙的验证,是直接判断cookie中的username参数是否为空,以cookie中的用户名为现在的用户的情况下,直接将用户名改为admin等管理者的用户名是管理者的权限。
cookie认证安全。cookie可以保存任何字符串,每个浏览器保存cookie字节数的大小不同,通常不超过4096个字节,通常cookie用于保存登录帐户的标志信息,如用户名或sessionid等,浏览器每次要求都会再次提供该域名的cookie信息
cookie问题较多的是cookie的SQL注入等常见漏洞,网络应用程序在服务方面直接读取cookie的用户名和ID值来操作当前用户的数据,这里存在很大的问题。
网站漏洞修复方案
所有用户输入的值都是不完全可信的,所以在防御认证漏洞之前,我们应该先了解认证的业务逻辑,严格限制输入的异常字符以及避免使用客户端提交上来的内容去直接进行操作。应该把cookie和session结合起来使用,不能从cookie中获取参数值然后进行操作。另外在设置session时,需要保证客户端不能操作敏感session参数。特别需要注意的是敏感数据不要放到cookie中,目前还有不少应用会把账号和密码都直接放入到cookie中,cookie在浏览器端以及传输过程中都存在被窃取的可能性,如果程序限制了一个用户只能同时在一个IP上面登录,这时候即使别人拿到了你不带密码的cookie也会使用不了,但是如果cookie里面保存了用户名和密码,这时候攻击者就可以尝试用密码直接登录了。