2014-10-07 92 views
0

我有一个7台服务器的集群应用程序。通过浏览器的头部注入

应用程序使用负载均衡器将用户重定向到服务器。

对于使用SiteMinder的身份验证。

对于验证我们看到请求req.getHeader(“HEADER_NAME”)

标题名被传递到由SiteMinder的应用程序,并且用户被认证。

当我们使用负载平衡器URL时,它与身份验证一起工作良好,因为SiteMinder负责处理任何可能的注入。

但是,当我们使用特定的服务器URL时,我们可以注入任何标题(例如使用Firefox中的修改标题),这就是问题所在。

有没有一种方法来确定头是否被注入?

感谢

回答

1

假设你正在寻找了头只包含认证的用户的用户名,不,你不能确定头部注射,因为它看起来完全一样的服务器,就好像SiteMinder的又增加了它。

如果有任何选项可以对头进行加密,散列或签名,那么这将是检查篡改的有效方法。

如果失败,您可以限制对直接服务器URL的访问,以便只有运行Site Minder的Load Balancer才能访问它们。为了实现这一点,你不会将公共IP路由到服务器本身。

0

没有办法认识到,头球攻门被注入。您可以使用两个optinons之一:

  1. 由于SilverlightFox建议加密的用户ID,而不是发送标题为纯文本。您可以通过使用SiteMinder的ActiveResponse功能来执行此操作,该功能允许您注入一个生成标题值的Java类。

  2. 另一个更简单的选项是定义应用程序和SiteMinder设置之间的共享密钥。然后您可以确保共享机密也作为标题与用户标识一起发送等。如果共享机密字符串未发送/不匹配,则可拒绝该请求。 这不像第一种选择那样安全,但是,假设你有合适的安全策略(受限访问服务器/ SM配置,只允许管理员直接访问服务器URL等),这应该就足够了。

但是,如果您对安全流程不太确定,最好使用第一个选项。

希望这会有所帮助。