【问题标题】:Get hostname from request in Play Framework. Security issue?从 Play Framework 中的请求中获取主机名。安全问题?
【发布时间】:2014-06-28 20:56:51
【问题描述】:

我正在使用 Play 2.2,我需要发送包含我的应用程序链接的电子邮件(用于注册目的)。 目前,电子邮件由 API 触发(基本上说“我想请求访问此应用程序”)。管理员收到一封电子邮件,可以接受或拒绝请求,并使用一次性令牌机制确保安全。

我正在使用反向路由和 absoluteURL() 方法来确定我需要在电子邮件中插入的 url 是什么。这不能硬编码,因为应用程序在不同的环境/域名上运行,所以我希望它是动态的。

但是 absoluteURL 使用请求作为隐式参数并从 Host 标头中获取 URL。可以伪造具有不同“主机”标头的请求并将其发送到我的应用程序,这可能会导致电子邮件具有类似http://evil.com/acceptRequest?token=gfdklhggfd 的链接 令牌是合法的,因为它实际上是由我的应用程序生成的。

有没有更好的方法来做到这一点而没有安全问题?

【问题讨论】:

    标签: security request playframework-2.2


    【解决方案1】:

    另一种方法是将主机名作为配置的一部分传递 - 如果每个环境作为单独的应用程序有效运行。

    例如在 application.conf 中

    hostName=${HOST_NAME}
    

    然后为运行播放服务器的脚本设置环境变量HOST_NAME。

    话虽如此——攻击者可以使用伪造的 URL 实现什么目标?访问密钥等是否可以重新用于另一台主机?这就是我会尝试确保安全的地方。

    【讨论】:

    • 是的,这是我认为最好的选择,当我第一次想到它时,它似乎不是那么灵活,但最终它应该没问题。关于伪造的 url,它可能会导致攻击者欺骗帐户管理员以授予他访问其安全帐户的权限。但是您是对的,这里还有一个独立于该主机的安全问题需要解决。这个问题更多的是关于使用请求标头来确定 Play 中的主机名的平均安全级别。谢谢你的回答!
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2011-11-22
    • 2014-02-25
    相关资源
    最近更新 更多