ステップ15:管理者のバックエンドをセキュアにする

5.2版本
保持 不明意
5.0

管理者のバックエンドをセキュアにする

管理者のバックエンドのインターフェースは,信頼された人からのみアクセス可能であるべきです.欧宝娱乐app下载地址Symfonyのセキュリティコンポーネントを使用して,网络サイトをセキュアにします。

嫩枝と同様に,セキュリティコンポーネントは既に他の依存パッケージが使用しておりインストールされていますが,明示的にcomposer.jsonファイルに追加しましょう:

1
$ 欧宝娱乐app下载地址symfony的作曲家REQ安全

用户エンティティを定义する

加载者が网页サイトに自分のアカウント作物することできないが,ここここはは者のため正式机构する认证をしましょううう。そのためにううましょううう。します。

最初のステップは,用户エンティティを定义することです。混乱を避けるためにここでは行政を使います。

欧宝娱乐app下载地址Symfony的のセキュリティ认证システムで行政エンティティを使用するためには,密码プロパティなどの要件が必要になります。

化妆:实体ではなく,使用の制作:用户コマンドを使用して行政エンティティを作成してください:

1
$ 欧宝娱乐app下载地址symfony的控制台来:用户管理

インタラクティブな质问に次次ように答えてください:管理者者教义に格式したい(是的),管理者のユニークな表示名を用户名,そして各ユーザーがパスワードを1つ持つことに(是的)と。

生成さされたクラスにには,getRole()erasecredentials()メソッドの他にも的欧宝娱乐app下载地址Symfonyの认证システムで必要なものが入っています。

行政ユーザーユーザーにさらにプロパティプロパティをを追たけれけれ,化妆:实体を实用しください。

EasyAdminのように__tostring()メソッドメソッド追加しましょう:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
---一/ src目录/实体/ admin.php的+++ B / SRC /实体/ admin.php的@@ -75,6 +75,111 @@ class admin实现UserInterface返回$这个;}+公共功能__tostring():字符串+ {+返回$以下 - >用户名;+}+/ ** * @see的UserInterface * /

行政生成する,このこのコマンド,认证システムとエンティティののためのセキュリティをを更ます

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 19
--- a / config / packages / security.yaml+++ b / config / packages / security.yaml@@ -1,7 +1,15 @@安全:+编码器:+应用程序\实体\管理员:+算法:自动+#https://s欧宝娱乐app下载地址ymfony.com/doc/current/security.html#where-do-users-come-from-user-providers提供程序:-  in_memory:{内存:null}+#用于从会话和其他功能中重新加载用户(例如switch_user)+ app_user_provider:+实体:+类:应用程序\实体\管理员+属性:用户名防火墙:dev:模式:^ /(_(profiler | wdt)| css |图像| js)/

欧宝娱乐app下载地址Symfony的にパスワードをエンコードするのに一番有效なアルゴリズムを选択させましょう(これは时が経つと変更されていくものです)。

マイグレーションを生成して,データベースを迁移します:

1 2
$ 欧宝娱乐app下载地址symfony控制台:迁移$ symfony控制台文规则:迁移:迁移-n

管理者ユーザーのパスワードを生成する

管理者のアカウントを作物するのに専システムをするはことはないです者しませんからログインしませから。行政とエンコードされたパスワードが必要になります。

好きなパスワードを选択して,次のコマンドを実行しパスワードをエンコードしてください:

1
$ 欧宝娱乐app下载地址symfony控制台安全:编码密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
欧宝娱乐app下载地址Symfony的密码编码器实用================================输入您的密码进行编码:> ------------------ ----------------------------------------------------------------------------------------  -  -  -  -  -  核心价值  -  -  -  -  -  -  -  -  -   -  -  -  -  -  -  -  -  ----------------------------------------------------------------------------------编码器所使用的Symfony欧宝娱乐app下载地址 \分量\安全\核心\编码器\ MigratingPasswordEncoder编码的密码$ argon2id $ V = 19 $ M = 65536,T = 4,P = 1 $ BQG + jovPcunctc30xG5PxQ $ TiGbx451NKdo + g9vLtfkMy4KjASKSOcnNxjij4gTX1s------------------------------------------------------------------------------------------------------------![注意]使用自我腌制编码器:编码器生成了自己的内置盐。[确定]密码编码成功

管理者を作品成する

次のsqlで制剂者ユーザーを追加してください:

1 2 3.
$ 欧宝娱乐app下载地址symfony的运行PSQL -C“插入管理员(ID,用户名,角色,密码)\值(NextVal('admin_id_seq'),'admin','[\“角色_admin \”]',\'\ $ argon2id \ $ v = 19 \ $ m = 65536,t = 4,p = 1 \ $ bqg + jovpccuctc30xg5pxq \ $ tigbx451nkdo + g9vltfkmy4kjasksocnxjij4gtx1s')“

パスワードの値の$符号は全てエスケープしましょう。

セキュリティ认证を设定する

管理者ユーザーができましたので,管理者のバックエンドをセキュアにすることができます。S欧宝娱乐app下载地址ymfony的は复数の认证の方法をサポートしていますが,ここでは,昔から人気のあるフォーム认证システムを使いましょう。

化妆:AUTHコマンドを実行しセキュリティ设定设定设定设定新闻,ログインテンプレートを作物,认证システムを作成しましょう:

1
$ 欧宝娱乐app下载地址symfony控制台:auth

1を选択し,ログインフォーム认证システムを生成し,AppAuthenticatorとし,コントローラーをSecurityController.し,登出URLを生成しましょ(是的)。



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
--- a / config / packages / security.yaml+++ b / config / packages / security.yaml@@ -16,6 +16,13 @@安全:安全性:假主:匿名:懒+后卫:+身份验证器:+  -  app \ security \ appauthenticator+注销:+路径:app_logout+#退出后在哪里重定向+#目标:app_any_route#激活不同的方式来验证#//www.oldmanjams.com/doc/current/security欧宝娱乐app下载地址.html#firewalls-authentication

コマンドコマンド力のヒントにあるように,ログインが成功た际ユーザーをリダイレクトするようにonAuthenticationSuccess()メソッドメソッドにあるルートルートをカスタマイズ必要がありありする必要があり

1 2 3 4 5 6 7 8 9 10 11 12
---一/ src目录/安全/ AppAuthenticator.php+++ B / SRC /安全/ AppAuthenticator.php@@ -96,8 +96,7 @ class appauthenticator延伸AbstractFormloginaUthEnticator实现敏感返回新RedirectResponse($ TARGETPATH);}-  //例如:返回新RedirectResponse($这 - > urlGenerator->生成( 'some_route'));- 抛出新\异常('todo:在​​'___ file_____________________________________ment ove+返回新RedirectResponse($这个 - > urlGenerator->生成( '管理员'));保护功能getloginurl()

ちなみに

Easyadminのルートが行政であることをどうやって覚えていられるでしょうか?(应用程序\控制器\管理\ DashboardController。で设定しました)覚えていられませんよねそんなときはコントローラファイルを见ることもできますが,次のコマンドでルート名とパスの关连を表示することもできます:

1
$ 欧宝娱乐app下载地址symfony控制台调试:路由器

认可アクセスコントロールのルールを追加する

セキュリティシステムは2つのパートによって构成されています。认证认可です。管理者ユーザーユーザー作物成し际际角色_Admin.ロールを与えています。访问控制にルールを追加して,角色_Admin.ロールを持ったユーザーのみが/行政セクションにアクセスできるようにしましょう:

1 2 3 4 5 6 7 8 9
--- a / config / packages / security.yaml+++ b / config / packages / security.yaml@@ -35,5 + 35,5 @@安全性:#简单的方法来为您的网站#注意大段的访问控制:只有*第一个*访问控制匹配将被使用ACCESS_CONTROL:- # -  {路径:^ /管理,角色:ROLE_ADMIN}+  -  {路径:^ /管理,角色:ROLE_ADMIN}# -  {path:^ / profile,角色:角色_user}

访问控制のルールは正规表现アクセスををををします。/行政から始まるURLにアクセスされると,セキュリティシステムは,ログインしているユーザーが角色_Admin.ロールがあるかチェックします。

ログインフォームで认证する

これで,管理者のバックエンドへのアクセスを试みると,ログインページにリダイレクトされ,ログインとパスワードの入力を促されるはずです:

行政と先ほどエンコードしたパスワードを使ってログインしてください。そのままSQLをコピーしていたなら,そのパスワードの値は行政です。

EasyAdminは自动的に的S欧宝娱乐app下载地址ymfonyの认证システムを検知します:

“ログアウト”リンクをクリックしてこれで,管理者者のバックエンドセキュアな状态になりなりエンドセキュアセキュアな状态になりなり

注釈

使:登记:形式コマンドを使えば,より高机能な认证システムを作成することができます。


  • “ 以前的ステップ14:フォームでフィードバックを受ける
  • 下一个 ”ステップ16:APIででスパム対策を

这项工作包括代码样本,是在a下获得的许可Creative Commons By-NC-SA 4.0执照。