来自extension_builder的安全警告:操作可公开访问

Fel*_*lix 2 typo3

我用扩展构建器创建了一个扩展.

在保存时,我收到此消息:

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

我该如何解决这个问题?是的我读了这个页面但是没有有用的提示.

And*_*ttó 6

因为问题是如何"解决问题":没有问题,这是一个警告,您可以将其删除并使您的请求安全.(如在另一个答案中那样.)页面上的"提示"实际上非常简单."问题",即用户能够操纵URL并使服务器执行不想要的操作.

下面是一个示例:您有一个页面用户列表,您可以打开他们的公共porfile以获取更多信息:

https://yourdomain.com/list/?tx_ext_plugin['action']=show&tx_ext_plugin['userId']=41.
Run Code Online (Sandbox Code Playgroud)

因此,如果我想制造麻烦,我将操作"show"更改为"delete",并且我可以从db中删除可怜的用户"41".那很不好.

https://yourdomain.com/list/?tx_ext_plugin['action']=delete&tx_ext_plugin['userId']=41.
Run Code Online (Sandbox Code Playgroud)

因此,既然你是业务逻辑错字3就没有为此提供开箱即用的解决方案.这就是为什么扩展构建器的警告说,您需要采取措施来防止滥用.

关于如何实现更好的安全性,这里有一些关于访问控制的想法以及一些想法在您的操作中实现的内容:

1)FE

  • 您可以将您的操作分成不同的插件.因此,如果您有公共列表操作,则无法将其修改为负责删除操作的插件.这怎么可能?TYPO3将查看数据库中的页面记录.并将呈现它,如果页面上有一个带有签名"tx_ext_plugin"的插件,那么它将获得发送的参数.在这种情况下,您可以将不同的插件添加到不同的页面,因此更改攻击者的签名将无济于事,因为:

    1. 如果插件没有注册删除操作,TYPO3将抛出异常.
    2. 如果您尝试更改整个签名,页面将无法识别插件.
  • 您可以将编辑/删除插件添加到用户必须登录的页面.您甚至可以管理多个用户组.与普通用户一样,只能编辑其个人资料,但高级用户可以进行进一步的更改.您可以在流体中使用视图助手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用户的字段.