【问题标题】:Java Play Framework Hidden Url RoutesJava Play 框架隐藏的 Url 路由
【发布时间】:2011-09-27 13:21:10
【问题描述】:

是否可以隐藏/屏蔽 java play 框架中的 url。我遇到的问题是我希望用户能够登录并查看属于他们的消息,但我不希望任何老用户通过简单地破解 url 来找到这些消息。

我得到的是一个通知控制器,它有一个名为 show(long id) 的方法。

这个方法我的路线是:

GET     /Message/Show               Notifications.show

我使用

调用函数
@Notifications.show(':id')

这个函数的url是:

http://localhost:9000/Message/Show?id=8

是否可以从 url 末尾删除参数,这样人们就不能通过猜测参数来破解某些 url。

【问题讨论】:

    标签: java url parameters playframework


    【解决方案1】:

    这可以通过拦截来实现。

    http://www.playframework.org/documentation/1.2.3/controllers#interceptions

    在这些类中,您可以检查当前用户是否已登录(存储在会话中)

    【讨论】:

    • 我同意 - 如果有人请求他们无权查看的消息,您应该抛出异常。与试图隐藏您在 url 中包含 id 的事实相反。虽然您可以使用 javascript 混淆事物,但它永远无法完全阻止猜测而不需要额外的秘密。
    • 是的,这将是一个更好的解决方案,但是您如何抛出该异常,我了解您如何检查用户是否被授权,即登录,但我不知道您将如何授权特定网址给用户。例如Show?id=8 只能由“用户 B”读取。
    • 这需要成为您的数据模型的一部分。您目前如何决定哪些消息显示为给定用户的 url?
    • 我已经发布了我的问题 scott 的答案,这就是你的意思吗?
    • 是的。这与我将采取的方法基本相同。由于此检查特定于 show 操作,因此拦截的开销可能大于收益。
    【解决方案2】:

    如果我说得对,您想隐藏 URL,这样用户就不会知道它们,也不会输入它们。如果他们这样做,他们会看到他们不应该看到的内容。这很糟糕,不应该这样做,请查看Security through obscurity (Wikipedia),使用可读/可添加书签的 URL 并构建适当的登录和安全机制,例如 leifg suggested。

    【讨论】:

      【解决方案3】:

      这是我使用的方法,我不知道这是否是解决此问题的最佳方法,但它确实可以按我的意愿工作。

      感谢所有帮助和想法。

      public static void show(long id)
          {
              Notification notification = Notification.findById(id);
              User connectedUser = User.find("byEmail", Security.connected()).first();
      
              if(notification.recipient.equals(connectedUser))
              {
                  render(notification);
              }
              else
              {
                  forbidden("This isnt your message stop hacking the urls!");     
              }
          }
      

      【讨论】:

        【解决方案4】:

        或者您可以登录用户并仅获取用户消息。

        当存在非常简单的解决方案时,为什么要搜索复杂的解决方案,例如混淆/拦截等。使用已连接用户的会话,仅获取他的消息并完成。

        【讨论】:

        • 如果唯一可查看的页面显示所有用户的消息,则此方法效果很好。如果有用于查看特定消息的单独页面,则需要标识符。但我同意,如果适用,这是一个好方法。
        • 然后检查消息是否归用户所有。如果没有被 403 标头拒绝。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        • 2015-10-23
        • 2014-01-17
        相关资源
        最近更新 更多