【问题标题】:Symfony Security - delete button in loopSymfony Security - 循环中的删除按钮
【发布时间】:2018-07-15 20:20:05
【问题描述】:

我想知道我的应用程序的安全性。我只是使用树枝循环来显示我在数据库中的所有记录。当我制作单独的站点以显示详细信息并且有按钮可以显示时,一切都很好。删除这个东西。它通常发生在 DELETE 方法中,有人只能显示自己的详细信息。但我希望有按钮来删除基本视图中的特定记录,其中显示每条记录,例如项目标题旁边。

  1. 我无法通过 CreateFormBuilder 执行此操作,因为我无法从表单发送项目的当前 ID(或者我只是不知道该怎么做)。但它安全吗?大家可以修改按钮的id参数,删除其他记录。

  2. 我可以使用 AJAX 并简单地在树枝上按按钮,但情况相同。每个人都可以改变,例如按钮中的data-id参数并删除其他记录。

在这种情况下我应该怎么做?您通常如何解决这个问题?

总结一下,我想制作一个安全按钮来删除每个显示记录旁边的项目。

祝你有美好的一天!

【问题讨论】:

    标签: php ajax symfony security button


    【解决方案1】:

    保护 AJAX 路由的方法之一是使用 JWT (json-Web-Token)(参见:https://jwt.io/)而不是随机字符串令牌。此令牌使用用户信息加密,以确保允许单击按钮的人执行某些操作(并且令牌与请求标头中的请求一起发送)。

    无论如何,您必须发送一些东西来识别您想要在数据库中删除或修改的元素的 id。我会亲自实现这个 JWT 系统,但是对您可以查看和单击这些按钮的页面的访问也必须受到保护。这样,您可以假设用户没有恶意。

    Theis bundle (https://github.com/lexik/LexikJWTAuthenticationBundle/blob/master/Resources/doc/index.md#getting-started) 可以帮助您非常轻松地在 symfony 上实现这个(我是这个框架的新手,我在几个小时内就完成了 - 只是一件事:如果您使用 Apache,请不要忘记允许在您的 Apache 配置中覆盖以允许 symfony 的 .htaccess 完成他的工作,或者标题将被 Apache 剥离 - 这让我需要几个小时才能找到为什么事情不起作用!)。

    希望这会有所帮助!

    【讨论】:

    • @Patrick:的确,JWT 非常值得一试以满足您的需求...
    【解决方案2】:

    这真的归结为你想要构建什么样的应用程序:

    • 更传统的应用程序 - 具有整页刷新/导航周期
    • 基于 AJAX - 对您的服务器进行各种异步调用

    在您选择的任何情况下,您都有责任检查当前用户是否有权对对象进行任何更改(包括删除)。这在 id 是整数的情况下尤为重要,这是可预测的。

    因此,首先,确保您的路线受到匿名用户的保护,其次,确保您实施了允许/拒绝用户特定操作的权限策略。

    大部分权限相关的东西都可以通过Voters实现,但如果你真的需要繁重的工作,你可以求助于ACL .

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多