首页 文章

有没有办法绕过Spring Security中的所有安全检查?

提问于
浏览
2

我来自PHP世界 . 我最常用的框架是Symfony,它主要基于Spring的想法 . 一个名为JMSSecurityExtraBundle的捆绑包支持可以通过configuration激活的角色 ROLE_IDDQD . 使用该角色进行身份验证将有效地绕过所有安全检查 - 直接对域层中的类方法进行Web安全约束或约束 .

由于安全相关的测试需要具有特定角色的用户进行身份验证,因此我将以编程方式身份验证用户创建身份验证对象并将其传递给安全上下文 . 这样我就可以直接在域代码上测试安全约束,而不会涉及任何UI .

由于许多域方法都是安全的,因此它会阻止我为某些测试设置fixture,因为当前经过身份验证的用户没有足够的权限来执行此操作 . 这是我开始使用 ROLE_IDDQD 的地方 - 我创建了一个方法,该方法可以在域层中执行任何可以绕过任何安全约束的任何操作:

$user = $this->iddqd(function () {
    return $this->userManager->save($this->aUser());
});

该方法将记住当前的身份验证,使用 ROLE_IDDQD 重新进行身份验证,执行传入的函数,然后恢复记住的身份验证 .

我发现 ROLE_IDDQD 没有提及,所以我猜这部分不是基于Spring Security . 有没有其他方法可以复制此功能?

2 回答

  • 0

    Spring安全性具有匿名用户的概念,具有自动分配的角色"ROLE_ANONYMOUS" . 您可以查找更多信息here

  • 0

    我很久以前就解决了这个问题 . 这就是我做到的 .

    在我的架构中,我通常有一个存储库层,它抽象出数据库访问,并在存储库层上方实现一个强制域逻辑的管理器层 .

    问题出在我的测试方法上 . 我试图使用管理器来设置测试数据 . 我现在直接使用存储库来执行它,并且不需要像IDDQD角色那样的黑客 .

    所以,基本上,我使用存储库来填充带有测试数据的数据库,然后命中管理器来测试其中的域逻辑 .

相关问题