安全
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
安全
身份验证和防火墙(即获取用户凭据)
您可以配置Symfony以使用您想要ob娱乐下载的任何方法验证您的用户,并从任何来源加载用户信息。这是一个复杂的话题,但是保安指南组有很多关于这方面的信息。
无论您需要什么,身份验证都在security.yml
,主要在防火墙
关键。
最佳实践
除非你有两个合法的不同的身份验证系统和用户(例如,主站点的表单登录和API的令牌系统),否则我们建议只使用一个防火墙条目匿名
关键的启用。
大多数应用程序只有一个身份验证系统和一组用户。因此,你只需要一个防火墙条目。当然也有例外,特别是如果你的网站上有独立的web和API部分。但关键是要让事情简单化。
此外,您应该使用匿名
防火墙下的密钥。如果您需要要求用户登录站点的不同部分(或可能接近所有Sections),使用access_control
区域。
最佳实践
使用bcrypt
用于编码用户密码的编码器。
如果您的用户有密码,那么我们建议使用bcrypt
编码器,而不是传统的SHA-512哈希编码器。的主要优点bcrypt
是否包含一个盐值,以防止彩虹表攻击,以及它的自适应性质,这允许使它更慢,以保持抵抗蛮力搜索攻击。
考虑到这一点,下面是我们应用程序的身份验证设置,它使用登录表单从数据库加载用户:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
# app / config / security.yml安全:编码器:实体AppBundle \ \用户:bcrypt提供者:database_users:实体:{类:AppBundle:用户,属性:用户名}防火墙:secured_area:模式:^ /匿名:真正的form_login:check_path:登录login_path:登录注销:路径:security_logout目标:主页#……Access_control存在,但这里没有显示
提示
我们项目的源代码包含解释每个部分的注释。
授权(即拒绝访问)
ob娱乐下载Symfony提供了几种强制授权的方法,包括access_control
配置在security.yml和使用isGranted在security.context
直接服务。
最佳实践
- 要保护广泛的URL模式,请使用
access_control
; - 检查安全直接在
security.context
当您有更复杂的情况时,服务。
还有不同的方法来集中授权逻辑,比如使用自定义安全投票人或ACL。
最佳实践
- 对于细粒度限制,定义一个自定义安全投票人;
- 限制进入任何对象任何用户通过管理界面,使用Symfony ACL。ob娱乐下载
手动检查权限
如果你不能基于URL模式控制访问,你可以在PHP中进行安全检查:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;/ /……/ * * *@Route("/{id}/edit", name="admin_post_edit") */公共函数editAction($id){$帖子=$这->getDoctrine ()->getRepository (“AppBundle:文章”)->找到($id);如果(!$帖子) {扔$这->createNotFoundException ();}如果(!$帖子->isAuthor ($这->getUser ())) {扔新AccessDeniedException ();}/ /……}
安全的选民
如果您的安全逻辑很复杂,不能集中到像isAuthor ()
在美国,你应该利用自定义选民。这些都比简单一个数量级acl并且会在几乎所有情况下为您提供所需的灵活性。
首先,创建一个投票者类。下面的示例显示了实现相同功能的投票人getAuthorEmail
你上面使用的逻辑:
12 34 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
名称空间AppBundle\安全;使用ob娱乐下载\组件\安全\核心\授权\选民\AbstractVoter;使用ob娱乐下载\组件\安全\核心\用户\用户界面;// AbstractVoter类需要Symfony 2.6或更ob娱乐下载高版本类PostVoter扩展AbstractVoter{常量创建=“创建”;常量编辑=“编辑”;受保护的函数getSupportedAttributes(){返回数组(自我::创建、自我::编辑);}受保护的函数getSupportedClasses(){返回数组(“AppBundle \实体\职位”);}受保护的函数isGranted($属性,$帖子,$用户= null){如果(!$用户运算符用户界面){返回假;}如果($属性= = =自我::创建&& in_array(“ROLE_ADMIN”,$用户->将getRoles (),真正的)) {返回真正的;}如果($属性= = =自我::编辑& &$用户->getEmail () = = =$帖子->getAuthorEmail ()) {返回真正的;}返回假;}}
要在应用程序中启用安全投票人,定义一个新服务:
1 2 3 4 5 6 7 8
# app / config / services.yml服务:#……post_voter:类:AppBundle \安全\ PostVoter公众:假标签:-{名称:security.voter}
现在,您可以使用投票人security.context
服务:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;/ /……/ * * *@Route("/{id}/edit", name="admin_post_edit") */公共函数editAction($id){$帖子=//查询post…如果(!$这->get (“security.context”)->isGranted (“编辑”,$帖子)) {扔新AccessDeniedException ();}}
了解更多
的FOSUserBundle,由Symfony社区开发,在Symfob娱乐下载ony中增加了对欧宝体育平台怎么样数据库支持的用户系统的支持。它还可以处理常见的任务,如用户注册和忘记密码功能。
启用记住我功能允许用户长时间保持登录状态。
在提供客户支持时,有时需要访问应用程序其他用户,以便您可以重现问题。ob娱乐下载Symfony提供了这样的能力模拟用户.
如果您的公司使用Symfony不支持的用户登录方法,您可以开发ob娱乐下载您自己的用户提供程序和您自己的身份验证提供者.