我使用扩展构建器创建了一个扩展。
保存时我收到此消息:
The object was updated. Please be aware that this action is publicly accessible unless you implement an access check. See https://docs.typo3.org/typo3cms/extensions/extension_builder/User/Index.html
如何解决此问题?是的我读了这个页面但是没有有用的提示。
答案 0 :(得分:6)
因为问题是如何解决问题":没有问题,这是一个警告,您可以将其删除并使您的请求安全。 (如另一个答案。) "提示"在页面上实际上非常简单。 "问题",用户能够操纵网址并使服务器执行不想要的操作。
这是一个例子: 您有一个页面用户列表,您可以打开他们的公共文件以获取更多信息:
https://yourdomain.com/list/?tx_ext_plugin['action']=show&tx_ext_plugin['userId']=41.
所以,如果我想制造麻烦,我会改变行动" show"去"删除"我可以删除可怜的用户" 41"来自db。那很糟糕。
https://yourdomain.com/list/?tx_ext_plugin['action']=delete&tx_ext_plugin['userId']=41.
因此,既然你是业务逻辑错字3就没有为此提供开箱即用的解决方案。这就是为什么扩展构建器的这个警告说,你需要采取措施来防止滥用。
关于如何实现更好的安全性,这里有一些关于访问控制的想法以及一些想法在您的行动中实现的内容:
1)FE
您可以将您的操作分成不同的插件。因此,如果您有公共列表操作,则无法将其修改为负责删除操作的插件。这怎么可能? TYPO3将查看数据库中的页面记录。并将呈现它,如果页面上有一个带有签名的插件" tx_ext_plugin"然后它将获得发送的参数。在这种情况下,您可以将不同的插件添加到不同的页面,因此为攻击者更改其签名不会有帮助,因为:
您可以将编辑/删除插件添加到用户必须登录的页面。您甚至可以管理多个用户组。与普通用户一样,只能编辑其个人资料,但高级用户可以进行进一步的更改。您可以在流体中使用视图帮助器IfHasRole,它可以显示已定义用户组的模板部分。 (还有一个ifAuthenticated ViewHelper)
你可以参加扩展" femanager"举个例子。有一个控制器" EditController",涵盖"更新"等操作。和"删除"。例如,在进行更新操作之前,检查登录用户是否具有与将要更改的记录相同的用户ID。如果您有一个复杂的示例,您也可以检查用户组。
2)BE
它实际上与前端几乎相同。
但不是在页面设置中分配的插件/用户组。您可以使用不同的挂载点,因此BE用户无法看到不允许编辑/删除的文件夹。
你也有BE的那两个ViewHelper。名称有:f:be:security.ifAuthenticated和f:be:security:ifHasRole。然而,ifAuthenticated也适用于FE,在BE环境中它没有意义。
您还可以识别BE用户的id和userGroup,并且可以在让某个动作运行之前进行自己的检查。
您还可以打开/关闭某个BE组的模块。
+1:这与任何动作无关,只是为了列出它。通过BE中的列表模式编辑记录,还可以允许/禁止BE用户的字段。
答案 1 :(得分:4)
扩展构建器创建虚拟操作以更新和创建记录。这些示例操作不包含任何安全检查,无论是否允许调用者这样做。
因此,为这些方法添加适当的访问控制是您的职责。例如。确保当前用户(无论是前端还是后端)实际上允许更新相关模型。