php - 保护 symfony 3 中登录系统的安全

标签 php php-5.3 symfony symfony-security

我在 symfony 3 中的系统登录出现问题。所以我的 security.yml 是:

security:
role_hierarchy:
  ROLE_ADMIN:       ROLE_USER
  ROLE_FMTI:        ROLE_FMTI
  ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
firewalls:
  dev:
      pattern:  ^/(_(profiler|wdt)|css|images|js)/
      security: false
  secured_area:
      pattern:    ^/admin
      anonymous: ~
      form_login:
          always_use_default_target_path: true
          default_target_path: /admin/homepage
          login_path:  /admin/login
          check_path:  /admin/login_check
      logout:
          path:   /admin/logout
          invalidate_session: true
          target: /admin/login
  access_control:
  - { path: ^/admin/homepage, roles: ROLE_ADMIN }

 providers:
  in_memory:
      memory:
          users:
              admin: { password: admin, roles: 'ROLE_ADMIN' }

 encoders:
  Symfony\Component\Security\Core\User\User: plaintext

路由:

app_admin_homepage:
  path:     /homepage
  defaults: { _controller: AppAdminBundle:Login:index }
login:
  path:   /login
  defaults:  { _controller: AppAdminBundle:Login:login }
login_check:
  path:   /login_check
logout:
  path: /logout

以及 LoginController 的登录方法:

public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');
    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();
    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render('AppAdminBundle:Member:login.html.twig', array(
        'last_username' => $lastUsername,
        'error'         => $error,
    ));
}

问题是,如果我使用凭据登录应用程序:admin/admin。之后我注销。

  1. 如果我尝试访问 test.dev/admin/homepage ----> 我正在重定向登录页面,而登录页面是 test.dev/admin/login,所以很好,我以 admin 身份登录。

  2. 如果我尝试访问 test.dev/admin/news/all -----> 我无需登录即可访问此页面,并且我的登录身份为 匿名

因此,如果用户未经过身份验证,我想重定向到所有路由 /admin/* 的登录页面。谢谢,对不起我的英语

最佳答案

在访问控制中您需要添加以下内容:

access_control:
  - { path: ^/admin/, roles: ROLE_ADMIN }

这意味着对于/admin/路由之外的任何内容,都需要 ROLE_ADMIN。

--更新

如果您需要访问/admin/login/,您需要添加到除/login 之外的每个管理路由,路径模式如/admin/api/,因此在您的访问控制中您将拥有以下内容:

access_control:
      - { path: ^/admin/api/, roles: ROLE_ADMIN }

关于php - 保护 symfony 3 中登录系统的安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34514675/

相关文章:

php - 使用 php 和 jquery 将输入从表单插入到数据库

php - CompilerPass 的 Symfony2 解释?

php - 我可以从 PHP 5.3.10 迁移到 PHP 5.6.0 吗?

php - 我可以在使用预加载时运行多个 Symfony 应用程序吗?

javascript - 如何使用 jquery 在表格中查找重复的下拉行?

php - 在服务器(PHP)上存储文件的可扩展方式?

php - codeigniter 3 get_where sql查询函数

php - PHP 5.3.X 中的非确定性对象引用错误

Symfony 3 限制 Controller Action 以使用特定的内容类型

php - 在带有 Symfony2 的共享主机上安装/更新 Composer 的运行时异常