fed*_*lov 8 java remember-me shiro
关于Shiro记得我的功能我几乎没有问题:
CipherKey?Shiro的默认"记住我"功能很成问题,原因就在于你在这里找到的原因.这是一个很好的问题.当我开始深入研究它们的实现时,我发现了同样的问题.
因为每次都使用随机IV
"记住我"cookie仅包含"Principals",即您的用户名,使用AES加密(默认情况下).每次登录时,完全相同的信息都将使用完全相同的密钥进行加密.Shiro 默认使用随机IV - 请参阅JcaCipherService,因此加密的二进制blob将在每次登录时随机出现.
是!
如果黑客知道您网站上任何帐户的用户名,并且您使用Shiro的默认设置,那么他们很容易生成有效的"记住我"令牌并登录您的网站.
希望您已使用"@RequiresAuthentication"标记所有敏感操作,并且不允许仅记住的用户看到任何敏感的内容,尽管如果您不这样做,这将是一个容易犯的错误.
出于这个原因,我认为Shiro在这里使用默认密钥是一个很大的安全漏洞.我认为Shiro应该默认使用随机密钥,或者如果你想使用"记住我",则要求你指定一个新密钥.参见例如https://github.com/pledbrook/grails-shiro/issues/28
你必须信任客户!
"记住我"cookie设置为"最大年龄",默认为1年 - 请参阅CookieRememberMeManager.
但是,Shiro在加密的cookie数据中不包含任何日期信息,因此无法验证客户端是否已遵守此时间限制.
我认为这是一个安全漏洞,Shiro应该在加密数据中包含生成日期,并验证此服务器端.
以下Shiro错误现在跟踪这些问题:
默认情况下,cookie 的最长期限rememberMe为一年。根据 Shiro 文档,您可以通过以下方式控制该 cookie 的最大年龄rememberMeManager:
securityManager.rememberMeManager.cookie.maxAge = [max_age_in_seconds];
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2672 次 |
| 最近记录: |