在Play Framework中获取请求的主机名。安全问题?

时间:2014-05-21 14:59:12

标签: security request playframework-2.2

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

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

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

在没有安全问题的情况下,有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

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

例如在application.conf

hostName=${HOST_NAME}

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

话虽如此 - 攻击者可以通过伪造的URL实现什么?是否可以将访问密钥等重新用于其他主机?这就是我试图确保安全的地方。